侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python实现的文本编辑器功能示例

Python  /  管理员 发布于 7年前   231

本文实例讲述了Python实现的文本编辑器功能。分享给大家供大家参考,具体如下:

wxpython实现的文本编辑器 效果如下:

主要功能:

1.编辑保存文本,打开修改文本
2.常用快捷键,复制,粘贴,全选等
3.支持撤销功能
4.支持弹出式菜单

代码如下:

#encoding=utf-8import wximport osclass 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相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。


  • 上一条:
    利用Python破解斗地主残局详解
    下一条:
    Python构建XML树结构的方法示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中实现字符串可逆性压缩及解压缩功能(0个评论)
    • 使用go + gin + jwt + qrcode实现网站生成登录二维码在app中扫码登录功能(0个评论)
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客