当前位置: 首页 > 科技观察

人生就是折腾:用Python

时间:2023-03-15 15:22:16 科技观察

写一个编辑器,一时间很无聊,想学学python,羡慕已久。做一个文本编辑器来磨练我的技能。将目标定为文本编辑器后,就可以开始编码了。一个极简的文本编辑器,只需要打开文本、编辑文本、保存、退出这么几个简单的功能(这里暂时不考虑编码、文件内容搜索等问题)。简单、直接、有效的函数#-*-coding:utf8-*-__version__=0.1__author__="Alycat"importsysclassNote():'''''Thisfnameisfilenamewithfullpath'''defopenFile(self,fname=None):iffnameisNone:return-1self.fname=fnamefile=open(fname,'r+')content=file.read()file.close()returncontentdefsaveFile(self,content=None):ifcontentisNone:return-1file=open(self.fname,'w')file.write(content)file.flush()file.close()return0defexit(self):sys.exit(0)这个文本编辑器的最终形式一定不能运行在类似于Vi的黑色窗口中和Emasc,所以以后会慢慢给她加个GUI。以上代码将作为文本编辑应用的一个功能模块,所以修改后的文本内容会缓存在UI中。用惯了java,下意识的在函数的外围放了一个类。我真的需要这门课吗?从python的在线文档(oschina其实可以直接看doc,喜欢)可以看出,在导入一个模块的时候,会做两件事,查询并初始化目标模块,在当前定义模块的名称脚本。既然是功能模块,是否可以不初始化Note的对象直接使用open、save、exit等功能呢?这个问题暂时搁置,这个编辑器只有几个简单的功能,连UI都没有,然后开始制作界面。大多数情况下,开发本地应用最简单的方法就是接口绑定功能,先做接口再配合接口完善功能。有几种方法可以在Python中制作界面。官方Lib中默认的GUI库是使用Tcl/Tk的,这里有相关介绍。其次,wxPython、PyQT等应用广泛。为了配合我们编辑器简单粗暴的做法,我们使用官方的GUI库来自定义界面。在代码中添加一个简单的接口:#-*-coding:utf8-*-__version__=0.1__author__="Alycat"importsysfromTkinterimport*classNote():def__init__(self):self.tk=Tk()self.createUI()self.tk.mainloop()defcreateUI(self):#createmenumenubar=Menu(self.tk)fmenu=Menu(menubar,tearoff=0)fmenu.add_command(label='打开')fmenu.add_command(label='保存')fmenu.add_command(label='Exit')menubar.add_cascade(label="文件",menu=fmenu)self.tk.config(menu=menubar)self.text=Text()self.text.pack()'''''Thefnameisfilenamewithfullpath'''defopenFile(self,fname=None):iffnameisNone:return-1self.fname=fnamefile=open(fname,'r+')content=file.read()file.close()returncontentdefsaveFile(self,content=None):ifcontentisNone:return-1file=open(self.fname,'w')file.write(content)file.flush()file.close()返回0defexit(self):sys.exit(0)if__name__=='__main__':Note()这个是UI的截图:看起来有点像,这里有两个widget,Menu和Text,具体介绍可以看下官方文档中的下一步是将UI与之前的功能连接起来。这里需要做一些修改。保存和打开文件时,用户需要定位文件路径和文件名。废话少说,继续粗暴的路线:#-*-coding:utf8-*-__version__=0.1__author__="Alycat"importsys,tkFileDialog,osfromTkinterimport*classNote():def__init__(self):self.tk=Tk()self.createUI()self.tk.mainloop()defcreateUI(self):#createmenumenubar=Menu(self.tk)fmenu=Menu(menubar,tearoff=0)fmenu.add_command(label='Open',command=self.open)fmenu.add_command(label='Save',command=self.save)fmenu.add_command(label='Exit',command=exit)menubar.add_cascade(label='File',menu=fmenu)self.tk.config(menu=menubar)self.text=Text()self.text.pack()defsave(self):txtContent=self.text.get(1.0,END)self.saveFile(content=txtContent)defopen(自我):self.filename=tkFileDialog.askopenfilename(initialdir=os.getcwd())filecontent=self.openFile(fname=self.filename)iffilecontentisnot-1:self.text.delete(1.0,END)self.text.insert(1.0,filecontent)'''''Thefnameisfilenamewithfullpath'''defopenFile(self,fname=None):iffnameisNone:return-1self.fname=fnamefile=open(fname,'r+')content=file.read()file.close()returncontentdefsaveFile(self,content=None):ifcontentisNone:return-1file=open(self.fname,'w')file.write(content)file.flush()file.close()return0defexit(self):sys.exit(0)if__name__=='__main__':Note()至此,一个很简单的文本编辑器就完成了,但是这不是最终之后,这个简单粗暴的文本编辑器将陆续进行改造和优化。原文链接:http://my.oschina.net/ox16/blog/210490