`
purpen
  • 浏览: 798359 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

wxPython写的简易编辑器(原创)

阅读更多
看了两天wxPython文档,作为练习简单做了一个简易的文本编辑器。有什么错误用法,希望一二,多谢!

呵呵,实现的功能是很简单的.(新建/打开/保存/另存/剪切/复制/粘贴/全选/删除^_^就这么多,算做simpleEditor beta1.0版吧。以后慢慢补充。)

python 代码:

# simpleEditor.py
 
  1. #!/usr/bin/env python  
  2. #coding=utf-8  
  3.   
  4. import wx  
  5. from wx.lib.wordwrap import wordwrap  
  6. import wx.richtext as rt  
  7. import ossys  
  8.   
  9. ID_NEW   =  wx.NewId()  
  10. ID_OPEN  =  wx.NewId()  
  11. ID_SAVE  =  wx.NewId()  
  12. ID_SAVEAS = wx.NewId()  
  13. ID_EXIT  =  wx.NewId()  
  14. ID_ABOUT =  wx.NewId()  
  15. ID_CUT   =  wx.NewId()  
  16. ID_COPY  =  wx.NewId()  
  17. ID_PASTE =  wx.NewId()  
  18. ID_SELECT = wx.NewId()  
  19. ID_CLEAR =  wx.NewId()  
  20.   
  21. wildcard = "Python source (*.py)|*.py|"    
  22.   
  23. class SimpleEditor(wx.Frame):  
  24.       
  25.     cur_file = ''  # current operate file  
  26.       
  27.     def __init__(self, parent, id, title):  
  28.         wx.Frame.__init__(self, parent, id, title, size=(1024, 768))  
  29.           
  30.         #------------create text area--------------  
  31.         edit_area = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE)  
  32.         self.text = edit_area  
  33.         wx.CallAfter(self.text.SetFocus)  
  34.           
  35.         #------------create status bar-------------  
  36.         self.CreateStatusBar()  
  37.         self.SetStatusText('Here display operate status.')  
  38.         #------------create menubar----------------  
  39.         menubar = wx.MenuBar(wx.MB_DOCKABLE)  
  40.         #------------create menus------------------  
  41.         file = wx.Menu()  
  42.         edit = wx.Menu()  
  43.         help = wx.Menu()  
  44.           
  45.         file.Append(ID_NEW, '&New\tCtrl+N', 'Create a new File')  
  46.         file.Append(ID_OPEN, '&Open\tCtrl+O', 'Open a File')  
  47.         file.Append(ID_SAVE, '&Save\tCtrl+S', 'Save a File')  
  48.         file.Append(ID_SAVEAS, '&Save As\tShift+Ctrl+S', 'Save as a File')  
  49.         file.AppendSeparator()  
  50.         file.Append(ID_EXIT, 'E&xit\tCtrl+W', 'Exit Current window')  
  51.           
  52.         edit.Append(ID_CUT, '&Cut\tCtrl+X', 'Cut select text')  
  53.         edit.Append(ID_COPY, '&Copy\tCtrl+C', 'Copy select text')  
  54.         edit.Append(ID_PASTE, '&Paste\tCtrl+V', 'Paste clipboard text')  
  55.         edit.AppendSeparator()  
  56.         edit.Append(ID_SELECT, '&Select All\tCtrl+A', 'Select all')  
  57.         edit.Append(ID_CLEAR, '&Clear\tCtrl+D', 'delete select text')  
  58.   
  59.         help.Append(ID_ABOUT, '&About Simple Editor', 'Simple Editor Message')  
  60.         menubar.Append(file, '&File')  
  61.         menubar.Append(edit, '&Edit')  
  62.         menubar.Append(help, '&Help')  
  63.         self.Bind(wx.EVT_MENU, self.OnOpen, id=ID_OPEN)  
  64.         self.Bind(wx.EVT_MENU, self.OnSave, id=ID_SAVE)  
  65.         self.Bind(wx.EVT_MENU, self.OnSaveAs, id=ID_SAVEAS)  
  66.         self.Bind(wx.EVT_MENU, self.OnExit, id=ID_EXIT)  
  67.         self.Bind(wx.EVT_MENU, self.OnAbout, id=ID_ABOUT)  
  68.         self.Bind(wx.EVT_MENU, self.OnCut, id=ID_CUT)  
  69.         self.Bind(wx.EVT_MENU, self.OnCopy, id=ID_COPY)  
  70.         self.Bind(wx.EVT_MENU, self.OnSelectAll, id=ID_SELECT)  
  71.         self.Bind(wx.EVT_MENU, self.OnClear, id=ID_CLEAR)  
  72.         self.Bind(wx.EVT_MENU, self.OnPaste, id=ID_PASTE)  
  73.           
  74.         # set the menu bar  
  75.         self.SetMenuBar(menubar)     
  76.         #-------------------create tools bar-----------------------  
  77.         toolbar = self.CreateToolBar(wx.TB_HORIZONTAL | wx.NO_BORDER  
  78.                                  | wx.TB_FLAT | wx.TB_TEXT)  
  79.         toolbar.AddLabelTool(ID_NEW, '', wx.Bitmap('icons/new.gif'))  
  80.         toolbar.AddLabelTool(ID_OPEN, '', wx.Bitmap('icons/open.gif'))  
  81.         toolbar.AddLabelTool(ID_SAVE, '', wx.Bitmap('icons/save.gif'))  
  82.         
  83.     #-------------------File menu event-------------------------  
  84.     def OnOpen(self, event):  
  85.         dlg = wx.FileDialog(  
  86.             self, message="Choose a file", defaultDir=os.getcwd(),  
  87.             defaultFile="", wildcard="All files (*.*)|*.*",  
  88.             style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR  
  89.             )  
  90.         if dlg.ShowModal() == wx.ID_OK:  
  91.             #paths = dlg.GetPaths()  
  92.             #print 'You selected files is %s:' % (paths)  
  93.             path = dlg.GetPath()  
  94.             if path: # open a file  
  95.                 self.cur_file = path  
  96.                 #self.text.SetValue(open(path,'r').read())  
  97.                 self.text.LoadFile(path, rt.RICHTEXT_TYPE_TEXT)  
  98.         dlg.Destroy()  
  99.           
  100.     def OnSave(self, event):  
  101.         cur_content = self.text.GetValue()  
  102.         if not self.cur_file:  
  103.             # if current file is new  
  104.             dlg = wx.FileDialog(  
  105.                 self, message="Save file as ...", defaultDir=os.getcwd(),  
  106.                 defaultFile="", wildcard="*.*", style=wx.SAVE  
  107.                 )  
  108.             if dlg.ShowModal() == wx.ID_OK:  
  109.                 self.cur_file = dlg.GetPath()  
  110.             elsepass         
  111.         if self.cur_file:  
  112.             fp = open(self.cur_file, 'w')  
  113.             fp.write(cur_content)  
  114.             fp.close()  
  115.           
  116.     def OnSaveAs(self, event):  
  117.         dlg = wx.FileDialog(  
  118.             self, "Choose a filename", wildcard="All files (*.*)|*.*",  
  119.             style=wx.SAVE)  
  120.         if dlg.ShowModal() == wx.ID_OK:  
  121.             path = dlg.GetPath()  
  122.             if path:  
  123.                 #self.text.SaveFile(path)  
  124.                 self.cur_file = path  
  125.                 fp = open(path, 'w')  
  126.                 fp.write(self.text.GetValue())  
  127.                 fp.close()  
  128.         dlg.Destroy()  
  129.               
  130.     def OnExit(self, event):  
  131.         self.Close(True)  
  132.     #-------------------Edit menu event---------------------------  
  133.     def OnCut(self, event):  
  134.         # Cut select text  
  135.         self.text.Cut()  
  136.           
  137.     def OnCopy(self, event):  
  138.         # copy select text  
  139.         self.text.Copy()  
  140.           
  141.     def OnPaste(self, event):  
  142.         # paste clipboard text  
  143.         self.text.Paste()  
  144.                 
  145.     def OnSelectAll(self, event):  
  146.         # select all text  
  147.         self.text.SelectAll()  
  148.           
  149.     def OnClear(self, event):  
  150.         # delete select text  
  151.         # self.text.Clear() is delete all text  
  152.         start,end = self.text.GetSelection()  
  153.         self.text.Remove(start, end)     
  154.           
  155.     #-------------------Help menu event---------------------------  
  156.     def OnAbout(self, event):  
  157.         # First we create and fill the info object  
  158.         info = wx.AboutDialogInfo()  
  159.         info.Name = "Simple Editor"  
  160.         info.Version = "beta 1.0"  
  161.         info.Copyright = "(C) 2008 Programmers and Coders Everywhere"  
  162.         # copy from wxPython demo  
  163.         info.Description = wordwrap(  
  164.             "A \"hello world\" program is a software program that prints out "  
  165.             "\"Hello world!\" on a display device. It is used in many introductory "  
  166.             "tutorials for teaching a programming language."  
  167.               
  168.             "\n\nSuch a program is typically one of the simplest programs possible "  
  169.             "in a computer language. A \"hello world\" program can be a useful "  
  170.             "sanity test to make sure that a language's compiler, development "  
  171.             "environment, and run-time environment are correctly installed.",  
  172.             350, wx.ClientDC(self))  
  173.         info.WebSite = ("http://www.bobo.com.cn", "BOBO VIDEO")  
  174.         info.Developers = ["Purpen"]  
  175.         # Then we call wx.AboutBox giving it that info object  
  176.         wx.AboutBox(info)  
  177.       
  178. class RunApp(wx.App):  
  179.     def OnInit(self):  
  180.         win = SimpleEditor(None, 1, 'SimpleEditor')  
  181.         self.SetTopWindow(win)  
  182.         win.Show(True)  
  183.         return True  # can't forget  
  184.           
  185. if __name__ == '__main__':  
  186.     RunApp().MainLoop()  

下载可以直接在命令行下运行(当然,环境一定要支持)。
分享到:
评论
3 楼 最佳蜗牛 2013-03-04  
最佳蜗牛 写道
是不是缺少了一个toolbar.Realize()?

第81行下面
2 楼 最佳蜗牛 2013-03-04  
是不是缺少了一个toolbar.Realize()?
1 楼 最佳蜗牛 2013-03-04  
2.7.3版本里不能显示工具栏的图标

相关推荐

    第11讲:深入理解指针(1).pdf

    第11讲:深入理解指针(1)

    springboot整合 freemarker方法

    springboot整合 freemarker方法

    第14讲:深入理解指针(4).pdf

    第14讲:深入理解指针(4)

    同行者4.1.2语音助手

    《同行者4.1.2语音助手:车机版安装详解》 在现代科技日新月异的时代,智能车载设备已经成为了汽车生活的重要组成部分。"同行者4.1.2"便是这样一款专为车机设计的语音助手,旨在提供更为便捷、安全的驾驶体验。该版本针对掌讯全系列设备进行了兼容优化,让车主能够轻松实现语音控制,减少驾驶过程中的手动操作,提升行车安全性。 我们来了解下"同行者4.1.2"的核心功能。这款语音助手集成了智能语音识别技术,用户可以通过简单的语音指令完成导航、音乐播放、电话拨打等一系列操作,有效避免了因操作手机或车机带来的分心。此外,其强大的语义理解和自学习能力,使得它能逐步适应用户的口音和习惯,提供更个性化的服务。 在安装过程中,用户需要注意的是,"同行者4.1.2"包含了四个核心组件,分别是: 1. TXZCore.apk:这是同行者语音助手的基础框架,包含了语音识别和处理的核心算法,是整个应用运行的基础。 2. com.txznet.comm.base.BaseApplication.apk:这个文件可能包含了应用的公共模块和基础服务,为其他组件提供支持。 3. TXZsetting.apk:这

    市场拓展主管绩效考核表.xls

    市场拓展主管绩效考核表

    “线上购车3D全方位体验:汽车模型展示与个性化定制功能”,three.js案例- 线上购车3d展示(源码) 包含内容:1.汽车模型展示;2.汽车肤;3.轮毂部件更;4.开关车门动画;5.汽车尺寸测量

    “线上购车3D全方位体验:汽车模型展示与个性化定制功能”,three.js案例- 线上购车3d展示(源码) 包含内容:1.汽车模型展示;2.汽车肤;3.轮毂部件更;4.开关车门动画;5.汽车尺寸测量;6.自动驾驶;7.镜面倒影;8.hdr运用;9.移动端适配; 本为html+css+three.js源码 ,核心关键词:three.js案例; 线上购车3D展示; 汽车模型展示; 汽车换肤; 轮毂部件更换; 开关车门动画; 汽车尺寸测量; 自动驾驶; 镜面倒影; HDR运用; 移动端适配; HTML+CSS+three.js源码。,"Three.js源码:线上购车3D展示案例,含汽车模型、换肤、轮毂更换等九大功能"

    (数据权威)中国城市_县域统计面板数据二合一

    数据名称:2000-2022年各县市区主要社会经济发展指标面板数据 数据类型:dta格式 数据来源:中国县域统计

    120页-环卫车项目初步方案.pdf

    一、智慧环卫管理平台的建设背景与目标 智慧环卫管理平台的建设源于对环卫管理全面升级的需求。当前,城管局已拥有139辆配备车载GPS系统、摄像头和油耗传感器的环卫车辆,但环卫人员尚未配备智能移动终端,公厕也缺乏信息化系统和智能终端设备。为了提升环卫作业效率、实现精细化管理并节省开支,智慧环卫管理平台应运而生。该平台旨在通过信息化技术和软硬件设备,如车载智能终端和环卫手机App,实时了解环卫人员、车辆的工作状态、信息和历史记录,使环卫作业管理透明化、精细化。同时,平台还期望通过数据模型搭建和数据研读,实现更合理的环卫动态资源配置,为环卫工作的科学、健康、持续发展提供决策支持。 二、智慧环卫管理平台的建设内容与功能 智慧环卫管理平台的建设内容包括运行机制体制建设、业务流程设计、智慧公厕系统建设、网络建设、主机和储存平台需求、平台运维管理体系、硬件标准规范体系以及考核评价体系等多个方面。其中,智慧公厕系统建设尤为关键,它能实时监控公厕运行状态,保障公厕的清洁和正常运行。平台建设还充分利用了现有的电子政务网络资源,并考虑了有线和无线网络的需求。在功能上,平台通过普查、整合等手段全面收集环卫车辆、企业、人员、设施、设备等数据,建立智慧环卫基础数据库。利用智能传感、卫星定位等技术实现环卫作业的在线监管和远程监控,实现对道路、公共场所等的作业状况和卫生状况的全面监管。此外,平台还建立了环卫作业网格化管理责任机制,实现从作业过程到结果的全面监管,科学评价区域、部门、单位和人员的作业效果。 三、智慧环卫管理平台的效益与风险规避 智慧环卫管理平台的建设将带来显著的环境、经济和管理效益。环境方面,它将有力推进环境卫生监管服务工作,改善环境卫生状况,为人民群众创造更加清洁、卫生的工作和生活环境。经济方面,通过智慧化监管,大大降低了传统管理手段的成本,提高了监管的准确性和效率。管理方面,平台能够追踪溯源市民反映的问题,如公厕异味、渣土车辆抛洒等,并找到相应的责任单位进行处置,防止类似事件再次发生。同时,平台还拥有强大的预警机制功能,能够在很多环卫问题尚未出现前进行处置。然而,平台建设也面临一定的风险,如部门协调、配合问题,建设单位选择风险以及不可预测的自然灾害等。为了规避这些风险,需要加强领导、统一思想,选择优秀的系统集成商承接项目建设,并做好计算机和应用系统的培训工作。同时,也要注意标准制定工作和相关法律法规的制定工作,以保证系统建设完成后能够真正为环卫管理工作带来便利。

    36 -企业管理主管绩效考核表1.xlsx

    36 -企业管理主管绩效考核表1

    1.1 -1.4 工程代码

    1.1 -1.4 工程代码

    USDT合约,USDT智能合约

    USDT合约,USDT智能合约

    基于姿态估计三维人脸形状重建.pdf

    基于姿态估计三维人脸形状重建.pdf

    一般员工绩效考核表模板(通用版) (2).xls

    一般员工绩效考核表模板(通用版) (2)

    全国295个地级市2011-2022互联网宽带接入用户数互联网普及率(数据权威)

    全国各省295地级市互联网普及率、互联网用户数、每百人互联网宽带用户(2011-2022年) 数据年份:2011-2022年(2022存在部分缺失) 数据范围:全国各省295个地级市 数据来源:地方统计局

    (数据权威)碳排放、碳中和、碳交易、碳金融、碳计算、碳建模资料

    一、各省、分行业CO2排放、283个地级市碳排放及计算过程 2.分行业二氧化碳排放量 在这里插入图片描述 3、280多个地级市碳排放及计算过程 二、碳中和文献、最新政策、碳金融数据+数学建模 1.二氧化碳减排规划,碳金融数据收集及数学建模 2.碳中和政策和下载量最高的碳中和论文 三、碳排放+碳市场+碳交易+碳中和+碳排放核算Excel自动计算表 全行业碳排放核算Excel自动计算表 四、碳交易数据 五、主要能源碳排放计算参数

    第20讲:自定义类型:结构体.pdf

    第20讲:自定义类型:结构体

    视觉跟踪算法综述.pdf

    视觉跟踪算法综述.pdf

    MATLAB超效率SBM-DEA模型代码详解:简易操作指南及期望与非期望产出的超效率分析,附Malmquist指数与分解功能,MATLAB的超效率SBM-DEA模型代码(有安装教程和内容讲解之类的东西

    MATLAB超效率SBM-DEA模型代码详解:简易操作指南及期望与非期望产出的超效率分析,附Malmquist指数与分解功能,MATLAB的超效率SBM-DEA模型代码(有安装教程和内容讲解之类的东西),操作很简单 可以做期望产出和非期望产出的超效率和非超效率sbm模型和Malmquist指数和分解 ,MATLAB; SBM-DEA模型; 超效率SBM-DEA; 安装教程; 内容讲解; 期望产出; 非期望产出; 超效率与非超效率sbm模型; Malmquist指数; 分解。,"MATLAB超效SBM-DEA模型代码:非期望产出分析的便捷工具"

    人事行政主管绩效考核评分表.xls

    人事行政主管绩效考核评分表

    人力资源管理工具绩效考核excel模板.xlsx

    人力资源管理工具绩效考核excel模板

Global site tag (gtag.js) - Google Analytics