本文实例讲述了Python实现的文本编辑器功能。分享给大家供大家参考,具体如下:
wxpython实现的文本编辑器 效果如下:
主要功能:
1.编辑保存文本,打开修改文本
2.常用快捷键,复制,粘贴,全选等
3.支持撤销功能
4.支持弹出式菜单
代码如下:
#encoding=utf-8 import wx import os class MyFrame(wx.Frame): def __init__(self): self.file='' self.content=[] self.count=0 self.width=700 self.height=500 wx.Frame.__init__(self,None,-1,u'记事本',size=(self.width,self.height)) self.panel=wx.Panel(self,-1) menubar=wx.MenuBar() menu1=wx.Menu() menubar.Append(menu1,u'文件') menu1.Append(1001,u'打开') menu1.Append(1002,u'保存') menu1.Append(1003,u'另存为') menu1.Append(1004,u'退出') menu2=wx.Menu() menubar.Append(menu2,u'编辑') menu2.Append(2001,u'撤销') menu2.Append(2002,u'清空') menu2.Append(2003,u'剪切 Ctrl + X') menu2.Append(2004,u'复制 Ctrl + C') menu2.Append(2005,u'粘贴 Ctrl + V ') menu2.Append(2006,u'全选 Ctrl + A',) menu=wx.Menu() ctrla=menu.Append(-1,"\tCtrl-A") ctrlc=menu.Append(-1,"\tCtrl-C") ctrlx=menu.Append(-1,"\tCtrl-X") ctrlv=menu.Append(-1,"\tCtrl-V") ctrls=menu.Append(-1,"\tCtrl-S") menubar.Append(menu,'') self.SetMenuBar(menubar) self.Bind(wx.EVT_MENU,self.OnSelect,ctrla) self.Bind(wx.EVT_MENU,self.Oncopy,ctrlc) self.Bind(wx.EVT_MENU,self.OnCut,self.OnPaste,ctrlv) self.Bind(wx.EVT_MENU,self.OnTSave,ctrls) self.Bind(wx.EVT_MENU,self.Onopen,id=1001) self.Bind(wx.EVT_MENU,self.OnSave,id=1002) self.Bind(wx.EVT_MENU,self.OnSaveAll,id=1003) self.Bind(wx.EVT_MENU,self.OnExit,id=1004) self.Bind(wx.EVT_MENU,self.OnBack,id=2001) self.Bind(wx.EVT_MENU,self.OnClear,id=2002) self.Bind(wx.EVT_MENU,id=2003) self.Bind(wx.EVT_MENU,id=2004) self.Bind(wx.EVT_MENU,id=2005) self.Bind(wx.EVT_MENU,id=2006) self.Bind(wx.EVT_SIZE,self.OnResize) new=wx.Image('./icons/new.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap() open=wx.Image('./icons/open.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap() exit=wx.Image('./icons/exit.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap() save=wx.Image('./icons/save.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap() saveall=wx.Image('./icons/saveall.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap() back=wx.Image('./icons/back.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap() go=wx.Image('./icons/go.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap() clear=wx.Image('./icons/clear.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap() toolbar=self.CreatetoolBar(wx.TB_HORIZONTAL|wx.TB_TEXT) toolbar.AddSimpletool(100,new,'New') toolbar.AddSimpletool(200,open,'Open') toolbar.AddSimpletool(300,exit,'Exit') toolbar.AddSimpletool(400,save,'Save') toolbar.AddSimpletool(500,saveall,'Save All') toolbar.AddSimpletool(600,back,'Back') toolbar.AddSimpletool(700,go,'Go') toolbar.AddSimpletool(800,clear,'Clear') toolbar.Realize() self.Bind(wx.EVT_TOOL,self.OnTOpen,id=200) self.Bind(wx.EVT_TOOL,self.OnTExit,id=300) self.Bind(wx.EVT_TOOL,id=400) self.Bind(wx.EVT_TOOL,self.OnTBack,id=600) self.Bind(wx.EVT_TOOL,self.OnTGo,id=700) self.Bind(wx.EVT_TOOL,self.OnTClear,id=800) self.text=wx.TextCtrl(self.panel,pos=(2,2),size=(self.width-10,self.height-50),style=wx.HSCROLL|wx.TE_MULTILINE) self.popupmenu = wx.Menu()#创建一个菜单 for text in "Cut copy Paste SelectAll".split():#填充菜单 item = self.popupmenu.Append(-1,text) self.Bind(wx.EVT_MENU,self.OnPopupItemSelected,item) self.panel.Bind(wx.EVT_CONTEXT_MENU,self.OnShowPopup)#绑定一个显示菜单事件 def OnShowPopup(self,event):#弹出显示 pos = event.GetPosition() pos = self.panel.ScreenToClient(pos) self.panel.PopupMenu(self.popupmenu,pos) def OnPopupItemSelected(self,event): item = self.popupmenu.FindItemById(event.GetId()) text = item.GetText() if text=='Cut': self.OnCut(event) elif text=='copy': self.Oncopy(event) elif text=='Paste': self.OnPaste(event) elif text=='SelectAll': self.OnSelect(event) def Onopen(self,event): filterFile=" All files (*.*) |*.*" opendialog=wx.FileDialog(self,u"选择文件",os.getcwd(),"",filterFile,wx.OPEN) if opendialog.ShowModal()==wx.ID_OK: self.file=opendialog.GetPath() f=open(self.file) self.text.write(f.read()) f.close() opendialog.Destroy() def OnTOpen(self,event): filterFile="All files (*.*) |*.*" opendialog=wx.FileDialog(self,wx.OPEN) if opendialog.ShowModal()==wx.ID_OK: self.file=opendialog.GetPath() f=open(self.file) self.text.write(f.read()) f.close() self.content.append(self.text.GetValue()) opendialog.Destroy() def OnSave(self,u'保存文件',wx.SAVE) if opendialog.ShowModal()==wx.ID_OK: self.file=opendialog.GetPath() self.text.SaveFile(self.file) def OnTSave(self,event): if self.file == '': filterFile="All files (*.*) |*.*" opendialog=wx.FileDialog(self,wx.SAVE) if opendialog.ShowModal()==wx.ID_OK: self.file=opendialog.GetPath() self.text.SaveFile(self.file) self.content.append(self.text.GetValue()) self.count=self.count+1 else: self.text.SaveFile(self.file) self.content.append(self.text.GetValue()) self.count=self.count+1 def OnSaveAll(self,event): pass def OnExit(self,event): self.Close() def OnTExit(self,event): self.Close() def OnBack(self,event): self.text.Undo() def OnTBack(self,event): try: self.count=self.count-1 self.text.SetValue(self.content[self.count]) except IndexError: self.count=0 def OnTGo(self,event): try: self.count=self.count+1 self.text.SetValue(self.content[self.count]) except IndexError: self.count=len(self.content)-1 def OnClear(self,event): self.text.Clear() def OnTClear(self,event): self.text.Clear() def OnCut(self,event): self.text.Cut() def Oncopy(self,event): self.text.copy() def OnPaste(self,event): self.text.Paste() def OnSelect(self,event): self.text.SelectAll() def OnResize(self,event): newsize=self.GetSize() width=newsize.GetWidth()-10 height=newsize.GetHeight()-50 self.text.SetSize((width,height)) self.text.Refresh() if __name__=='__main__': app=wx.App() myFrame=MyFrame() myFrame.Show() app.MainLoop()
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。