这篇文章主要介绍了python实现的文本编辑器功能,结合实例形式详细分析了基于wxpython实现文本编辑器所需的功能及相关实现技巧,需要的朋友可以参考下
本文实例讲述了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,ctrlc)
self.bind(wx.evt_menu, 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, self.oncut, id=2003)
self.bind(wx.evt_menu, self.oncopy, id=2004)
self.bind(wx.evt_menu, self.onpaste, id=2005)
self.bind(wx.evt_menu, self.onselect, 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,self.ontsave,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,-1,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,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()
self.content.append(self.text.getvalue())
opendialog.destroy()
def onsave(self,event):
filterfile="all files (*.*) |*.*"
opendialog=wx.filedialog(self,u'保存文件',os.getcwd(),"",filterfile,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,u'保存文件',os.getcwd(),"",filterfile,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实现文本编辑器功能实例详解的详细内容。