python文本编辑器是干嘛的_python实现的文本编辑器

本文介绍了一个使用wxPython库构建的文本编辑器,具备打开、保存、撤销、复制、粘贴、全选等基本功能,以及自定义快捷键和弹出式菜单。通过示例代码展示了如何实现这些功能。
摘要由CSDN通过智能技术生成

wxpython实现的文本编辑器

效果如下:

0_13246226472jxg.gif

主要功能:

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值