1 Star 0 Fork 0

微距离/pythonnet

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
wordpad.py 13.80 KB
一键复制 编辑 原始数据 按行查看 历史
Benedikt Reinartz 提交于 2022-06-09 13:14 +08:00 . Fix remaining issues with wordpad demo
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import clr
import System
clr.AddReference("System.Windows.Forms")
import System.Windows.Forms as WinForms
from System.IO import File
from System.Text import Encoding
from System.Drawing import Color, Point, Size
from System.Threading import ApartmentState, Thread, ThreadStart
class Wordpad(WinForms.Form):
"""A simple example winforms application similar to wordpad."""
def __init__(self):
super().__init__()
self.filename = ''
self.word_wrap = True
self.doctype = 1
self.InitializeComponent()
self.NewDocument()
def InitializeComponent(self):
"""Initialize form components."""
self.components = System.ComponentModel.Container()
self.openFileDialog = WinForms.OpenFileDialog()
self.saveFileDialog = WinForms.SaveFileDialog()
self.mainMenu = WinForms.MainMenu()
self.fileMenu = WinForms.MenuItem()
self.menuFileNew = WinForms.MenuItem()
self.menuFileOpen = WinForms.MenuItem()
self.menuFileSave = WinForms.MenuItem()
self.menuFileSaveAs = WinForms.MenuItem()
self.menuFileSep_1 = WinForms.MenuItem()
self.menuFileExit = WinForms.MenuItem()
self.editMenu = WinForms.MenuItem()
self.menuEditUndo = WinForms.MenuItem()
self.menuEditRedo = WinForms.MenuItem()
self.menuEditSep_1 = WinForms.MenuItem()
self.menuEditCut = WinForms.MenuItem()
self.menuEditCopy = WinForms.MenuItem()
self.menuEditPaste = WinForms.MenuItem()
self.menuEditSep_2 = WinForms.MenuItem()
self.menuEditSelectAll = WinForms.MenuItem()
self.formatMenu = WinForms.MenuItem()
self.menuFormatFont = WinForms.MenuItem()
self.menuFormatWordWrap = WinForms.MenuItem()
self.aboutMenu = WinForms.MenuItem()
self.menuHelpAbout = WinForms.MenuItem()
self.richTextBox = WinForms.RichTextBox()
self.statusBarPanel1 = WinForms.StatusBarPanel()
self.statusBar = WinForms.StatusBar()
self.fontDialog = WinForms.FontDialog()
self.statusBarPanel1.BeginInit()
# ===================================================================
# File Menu
# ===================================================================
self.menuFileNew.Text = "&New"
self.menuFileNew.Shortcut = WinForms.Shortcut.CtrlN
self.menuFileNew.ShowShortcut = False
self.menuFileNew.Index = 0
self.menuFileNew.Click += self.OnClickFileNew
self.menuFileOpen.Text = "&Open"
self.menuFileOpen.Shortcut = WinForms.Shortcut.CtrlO
self.menuFileOpen.ShowShortcut = False
self.menuFileOpen.Index = 1
self.menuFileOpen.Click += self.OnClickFileOpen
self.menuFileSave.Text = "&Save"
self.menuFileSave.Shortcut = WinForms.Shortcut.CtrlS
self.menuFileSave.ShowShortcut = False
self.menuFileSave.Index = 2
self.menuFileSave.Click += self.OnClickFileSave
self.menuFileSaveAs.Text = "Save &As"
self.menuFileSaveAs.Index = 3
self.menuFileSaveAs.Click += self.OnClickFileSaveAs
self.menuFileSep_1.Text = "-"
self.menuFileSep_1.Index = 4
self.menuFileExit.Text = "E&xit"
self.menuFileExit.Shortcut = WinForms.Shortcut.AltF4
self.menuFileExit.ShowShortcut = False
self.menuFileExit.Index = 5
self.menuFileExit.Click += self.OnClickFileExit
self.fileMenu.Text = "&File"
self.fileMenu.Index = 0
items = (self.menuFileNew, self.menuFileOpen,
self.menuFileSave, self.menuFileSaveAs,
self.menuFileSep_1, self.menuFileExit)
self.fileMenu.MenuItems.AddRange(items)
# ===================================================================
# Edit menu
# ===================================================================
self.menuEditUndo.Text = "&Undo"
self.menuEditUndo.Shortcut = WinForms.Shortcut.CtrlZ
self.menuEditUndo.Index = 0
self.menuEditUndo.Click += self.OnClickEditUndo
self.menuEditRedo.Text = "&Redo"
self.menuEditRedo.Shortcut = WinForms.Shortcut.CtrlY
self.menuEditRedo.Index = 1
self.menuEditRedo.Click += self.OnClickEditRedo
self.menuEditSep_1.Text = "-"
self.menuEditSep_1.Index = 2
self.menuEditCut.Text = "Cut"
self.menuEditCut.Shortcut = WinForms.Shortcut.CtrlX
self.menuEditCut.Index = 3
self.menuEditCut.Click += self.OnClickEditCut
self.menuEditCopy.Text = "Copy"
self.menuEditCopy.Shortcut = WinForms.Shortcut.CtrlC
self.menuEditCopy.Index = 4
self.menuEditCopy.Click += self.OnClickEditCopy
self.menuEditPaste.Text = "Paste"
self.menuEditPaste.Shortcut = WinForms.Shortcut.CtrlV
self.menuEditPaste.Index = 5
self.menuEditPaste.Click += self.OnClickEditPaste
self.menuEditSelectAll.Text = "Select All"
self.menuEditSelectAll.Shortcut = WinForms.Shortcut.CtrlA
self.menuEditSelectAll.Index = 7
self.menuEditSelectAll.Click += self.OnClickEditSelectAll
self.menuEditSep_2.Text = "-"
self.menuEditSep_2.Index = 6
self.editMenu.Text = "&Edit"
self.editMenu.Index = 1
items = (self.menuEditUndo, self.menuEditRedo,
self.menuEditSep_1, self.menuEditCut,
self.menuEditCopy, self.menuEditPaste,
self.menuEditSep_2, self.menuEditSelectAll)
self.editMenu.MenuItems.AddRange(items)
# ===================================================================
# Format Menu
# ===================================================================
self.menuFormatWordWrap.Text = "Word Wrap"
self.menuFormatWordWrap.Checked = self.word_wrap
self.menuFormatWordWrap.Index = 1
self.menuFormatWordWrap.Click += self.OnClickFormatWordWrap
self.menuFormatFont.Text = "Fo&nt"
self.menuFormatFont.Index = 0
self.menuFormatFont.Click += self.OnClickFormatFont
self.formatMenu.Text = "F&ormat"
self.formatMenu.Index = 2
items = (self.menuFormatWordWrap, self.menuFormatFont)
self.formatMenu.MenuItems.AddRange(items)
# ===================================================================
# About menu
# ===================================================================
self.menuHelpAbout.Text = "&About"
self.menuHelpAbout.Index = 0
self.menuHelpAbout.Click += self.OnClickHelpAbout
self.aboutMenu.Text = "&Help"
self.aboutMenu.Index = 3
self.aboutMenu.MenuItems.Add(self.menuHelpAbout)
self.statusBarPanel1.Dock = WinForms.DockStyle.Fill
self.statusBarPanel1.Text = "Ready"
self.statusBarPanel1.Width = 755
self.richTextBox.Dock = WinForms.DockStyle.Fill
self.richTextBox.Size = System.Drawing.Size(795, 485)
self.richTextBox.TabIndex = 0
self.richTextBox.AutoSize = True
self.richTextBox.ScrollBars = WinForms.RichTextBoxScrollBars.ForcedBoth
self.richTextBox.Font = System.Drawing.Font("Tahoma", 10.0)
self.richTextBox.AcceptsTab = True
self.richTextBox.Location = System.Drawing.Point(0, 0)
self.statusBar.BackColor = System.Drawing.SystemColors.Control
self.statusBar.Location = System.Drawing.Point(0, 518)
self.statusBar.Size = System.Drawing.Size(775, 19)
self.statusBar.TabIndex = 1
self.statusBar.ShowPanels = True
self.statusBar.Panels.Add(self.statusBarPanel1)
items = (self.fileMenu, self.editMenu, self.formatMenu, self.aboutMenu)
self.mainMenu.MenuItems.AddRange(items)
self.openFileDialog.Filter = "Text documents|*.txt|RTF document|*.rtf"
self.openFileDialog.Title = "Open document"
self.saveFileDialog.Filter = "Text Documents|*.txt|" \
"Rich Text Format|*.rtf"
self.saveFileDialog.Title = "Save document"
self.saveFileDialog.FileName = "Untitled"
self.AutoScaleBaseSize = System.Drawing.Size(5, 13)
self.ClientSize = System.Drawing.Size(775, 537)
self.Menu = self.mainMenu
self.Text = "Python Wordpad"
self.Controls.Add(self.statusBar)
self.Controls.Add(self.richTextBox)
self.statusBarPanel1.EndInit()
def Dispose(self):
self.components.Dispose()
WinForms.Form.Dispose(self)
def OnClickFileNew(self, sender, args):
self.SaveChangesDialog()
self.NewDocument()
def OnClickFileOpen(self, sender, args):
self.SaveChangesDialog()
self.OpenDocument()
def OnClickFileSave(self, sender, args):
self.SaveDocument()
def OnClickFileSaveAs(self, sender, args):
self.filename = ''
self.SaveDocument()
def OnClickFileExit(self, sender, args):
self.SaveChangesDialog()
self.Close()
def OnClickEditUndo(self, sender, args):
self.richTextBox.Undo()
def OnClickEditRedo(self, sender, args):
self.richTextBox.Redo()
def OnClickEditCut(self, sender, args):
self.richTextBox.Cut()
def OnClickEditCopy(self, sender, args):
self.richTextBox.Copy()
def OnClickEditPaste(self, sender, args):
self.richTextBox.Paste()
def OnClickEditSelectAll(self, sender, args):
self.richTextBox.SelectAll()
def OnClickFormatWordWrap(self, sender, args):
value = not self.word_wrap
self.richTextBox.WordWrap = value
self.menuFormatWordWrap.Checked = value
self.word_wrap = value
def OnClickFormatFont(self, sender, args):
if self.fontDialog.ShowDialog() == WinForms.DialogResult.OK:
self.richTextBox.SelectionFont = self.fontDialog.Font
def OnClickHelpAbout(self, sender, args):
AboutForm().ShowDialog(self)
def NewDocument(self):
self.doctype = 1
self.richTextBox.Rtf = ''
self.richTextBox.Text = ''
self.Text = 'Python Wordpad - (New Document)'
self.filename = ''
def OpenDocument(self):
if self.openFileDialog.ShowDialog() != WinForms.DialogResult.OK:
return
filename = self.openFileDialog.FileName
stream = File.OpenRead(filename)
buff = System.Array.CreateInstance(System.Byte, 1024)
buff.Initialize()
data = []
read = 1
while read > 0:
read, _ = stream.Read(buff, 0, 1024)
temp = Encoding.ASCII.GetString(buff, 0, read)
data.append(temp)
data = ''.join(data)
stream.Close()
filename = self.filename = filename.lower()
if filename.endswith('.rtf'):
self.richTextBox.Rtf = data
self.doctype = 2
else:
self.richTextBox.Text = data
self.doctype = 1
self.Text = 'Python Wordpad - %s' % filename
self.richTextBox.Select(0, 0)
def SaveDocument(self):
filename = self.filename
if not filename:
if self.saveFileDialog.ShowDialog() != WinForms.DialogResult.OK:
return
filename = self.saveFileDialog.FileName
filename = self.filename = filename.lower()
self.Text = 'Python Wordpad - %s' % filename
self.richTextBox.Select(0, 0)
stream = File.OpenWrite(filename)
if filename.endswith('.rtf'):
data = self.richTextBox.Rtf
else:
data = self.richTextBox.Text
data = System.Text.Encoding.ASCII.GetBytes(System.String(data))
stream.Write(data, 0, data.Length)
stream.Close()
def SaveChangesDialog(self):
if self.richTextBox.Modified:
if WinForms.MessageBox.Show(
"Save changes?", "Word Pad",
WinForms.MessageBoxButtons.OK |
WinForms.MessageBoxButtons.YesNo
) == WinForms.DialogResult.Yes:
self.SaveDocument()
return 1
return 0
class AboutForm(WinForms.Form):
def __init__(self):
super().__init__()
self.InitializeComponent()
def InitializeComponent(self):
"""Initialize form components."""
self.Text = "Python Wordpad"
self.components = System.ComponentModel.Container()
self.btnClose = WinForms.Button()
self.label1 = WinForms.Label()
self.SuspendLayout()
self.btnClose.Location = System.Drawing.Point(360, 181)
self.btnClose.Name = "bnClose"
self.btnClose.TabIndex = 1
self.btnClose.Text = "&Close"
self.btnClose.Click += self.OnClickClose
self.label1.Location = System.Drawing.Point(20, 20)
self.label1.Name = "label1"
self.label1.Size = System.Drawing.Size(296, 140)
self.label1.TabIndex = 2
self.label1.Text = "Python Wordpad - an example winforms " \
"application using Python.NET"
self.AutoScaleBaseSize = System.Drawing.Size(5, 13)
self.ClientSize = System.Drawing.Size(300, 150)
self.Controls.AddRange((self.label1, self.btnClose))
self.FormBorderStyle = WinForms.FormBorderStyle.FixedDialog
self.MaximizeBox = False
self.MinimizeBox = False
self.Name = "AboutForm"
self.ShowInTaskbar = False
self.StartPosition = WinForms.FormStartPosition.CenterScreen
self.Text = "About"
self.ResumeLayout(False)
def OnClickClose(self, sender, args):
self.Close()
def app_thread():
app = Wordpad()
WinForms.Application.Run(app)
app.Dispose()
def main():
thread = Thread(ThreadStart(app_thread))
thread.SetApartmentState(ApartmentState.STA)
thread.Start()
thread.Join()
if __name__ == '__main__':
main()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/MicroDistanceStudio/pythonnet.git
git@gitee.com:MicroDistanceStudio/pythonnet.git
MicroDistanceStudio
pythonnet
pythonnet
master

搜索帮助