#!/usr/bin/env python# -*- coding: utf-8 -*-import clrimport Systemclr.AddReference("System.Windows.Forms")import System.Windows.Forms as WinFormsfrom System.IO import Filefrom System.Text import Encodingfrom System.Drawing import Color, Point, Sizefrom System.Threading import ApartmentState, Thread, ThreadStartclass Wordpad(WinForms.Form):"""A simple example winforms application similar to wordpad."""def __init__(self):super().__init__()self.filename = ''self.word_wrap = Trueself.doctype = 1self.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.CtrlNself.menuFileNew.ShowShortcut = Falseself.menuFileNew.Index = 0self.menuFileNew.Click += self.OnClickFileNewself.menuFileOpen.Text = "&Open"self.menuFileOpen.Shortcut = WinForms.Shortcut.CtrlOself.menuFileOpen.ShowShortcut = Falseself.menuFileOpen.Index = 1self.menuFileOpen.Click += self.OnClickFileOpenself.menuFileSave.Text = "&Save"self.menuFileSave.Shortcut = WinForms.Shortcut.CtrlSself.menuFileSave.ShowShortcut = Falseself.menuFileSave.Index = 2self.menuFileSave.Click += self.OnClickFileSaveself.menuFileSaveAs.Text = "Save &As"self.menuFileSaveAs.Index = 3self.menuFileSaveAs.Click += self.OnClickFileSaveAsself.menuFileSep_1.Text = "-"self.menuFileSep_1.Index = 4self.menuFileExit.Text = "E&xit"self.menuFileExit.Shortcut = WinForms.Shortcut.AltF4self.menuFileExit.ShowShortcut = Falseself.menuFileExit.Index = 5self.menuFileExit.Click += self.OnClickFileExitself.fileMenu.Text = "&File"self.fileMenu.Index = 0items = (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.CtrlZself.menuEditUndo.Index = 0self.menuEditUndo.Click += self.OnClickEditUndoself.menuEditRedo.Text = "&Redo"self.menuEditRedo.Shortcut = WinForms.Shortcut.CtrlYself.menuEditRedo.Index = 1self.menuEditRedo.Click += self.OnClickEditRedoself.menuEditSep_1.Text = "-"self.menuEditSep_1.Index = 2self.menuEditCut.Text = "Cut"self.menuEditCut.Shortcut = WinForms.Shortcut.CtrlXself.menuEditCut.Index = 3self.menuEditCut.Click += self.OnClickEditCutself.menuEditCopy.Text = "Copy"self.menuEditCopy.Shortcut = WinForms.Shortcut.CtrlCself.menuEditCopy.Index = 4self.menuEditCopy.Click += self.OnClickEditCopyself.menuEditPaste.Text = "Paste"self.menuEditPaste.Shortcut = WinForms.Shortcut.CtrlVself.menuEditPaste.Index = 5self.menuEditPaste.Click += self.OnClickEditPasteself.menuEditSelectAll.Text = "Select All"self.menuEditSelectAll.Shortcut = WinForms.Shortcut.CtrlAself.menuEditSelectAll.Index = 7self.menuEditSelectAll.Click += self.OnClickEditSelectAllself.menuEditSep_2.Text = "-"self.menuEditSep_2.Index = 6self.editMenu.Text = "&Edit"self.editMenu.Index = 1items = (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_wrapself.menuFormatWordWrap.Index = 1self.menuFormatWordWrap.Click += self.OnClickFormatWordWrapself.menuFormatFont.Text = "Fo&nt"self.menuFormatFont.Index = 0self.menuFormatFont.Click += self.OnClickFormatFontself.formatMenu.Text = "F&ormat"self.formatMenu.Index = 2items = (self.menuFormatWordWrap, self.menuFormatFont)self.formatMenu.MenuItems.AddRange(items)# ===================================================================# About menu# ===================================================================self.menuHelpAbout.Text = "&About"self.menuHelpAbout.Index = 0self.menuHelpAbout.Click += self.OnClickHelpAboutself.aboutMenu.Text = "&Help"self.aboutMenu.Index = 3self.aboutMenu.MenuItems.Add(self.menuHelpAbout)self.statusBarPanel1.Dock = WinForms.DockStyle.Fillself.statusBarPanel1.Text = "Ready"self.statusBarPanel1.Width = 755self.richTextBox.Dock = WinForms.DockStyle.Fillself.richTextBox.Size = System.Drawing.Size(795, 485)self.richTextBox.TabIndex = 0self.richTextBox.AutoSize = Trueself.richTextBox.ScrollBars = WinForms.RichTextBoxScrollBars.ForcedBothself.richTextBox.Font = System.Drawing.Font("Tahoma", 10.0)self.richTextBox.AcceptsTab = Trueself.richTextBox.Location = System.Drawing.Point(0, 0)self.statusBar.BackColor = System.Drawing.SystemColors.Controlself.statusBar.Location = System.Drawing.Point(0, 518)self.statusBar.Size = System.Drawing.Size(775, 19)self.statusBar.TabIndex = 1self.statusBar.ShowPanels = Trueself.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.mainMenuself.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_wrapself.richTextBox.WordWrap = valueself.menuFormatWordWrap.Checked = valueself.word_wrap = valuedef OnClickFormatFont(self, sender, args):if self.fontDialog.ShowDialog() == WinForms.DialogResult.OK:self.richTextBox.SelectionFont = self.fontDialog.Fontdef OnClickHelpAbout(self, sender, args):AboutForm().ShowDialog(self)def NewDocument(self):self.doctype = 1self.richTextBox.Rtf = ''self.richTextBox.Text = ''self.Text = 'Python Wordpad - (New Document)'self.filename = ''def OpenDocument(self):if self.openFileDialog.ShowDialog() != WinForms.DialogResult.OK:returnfilename = self.openFileDialog.FileNamestream = File.OpenRead(filename)buff = System.Array.CreateInstance(System.Byte, 1024)buff.Initialize()data = []read = 1while 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 = dataself.doctype = 2else:self.richTextBox.Text = dataself.doctype = 1self.Text = 'Python Wordpad - %s' % filenameself.richTextBox.Select(0, 0)def SaveDocument(self):filename = self.filenameif not filename:if self.saveFileDialog.ShowDialog() != WinForms.DialogResult.OK:returnfilename = self.saveFileDialog.FileNamefilename = self.filename = filename.lower()self.Text = 'Python Wordpad - %s' % filenameself.richTextBox.Select(0, 0)stream = File.OpenWrite(filename)if filename.endswith('.rtf'):data = self.richTextBox.Rtfelse:data = self.richTextBox.Textdata = 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 1return 0class 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 = 1self.btnClose.Text = "&Close"self.btnClose.Click += self.OnClickCloseself.label1.Location = System.Drawing.Point(20, 20)self.label1.Name = "label1"self.label1.Size = System.Drawing.Size(296, 140)self.label1.TabIndex = 2self.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.FixedDialogself.MaximizeBox = Falseself.MinimizeBox = Falseself.Name = "AboutForm"self.ShowInTaskbar = Falseself.StartPosition = WinForms.FormStartPosition.CenterScreenself.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()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。