新聞中心
一時(shí)閑極無(wú)聊,想把心儀已久的python好好學(xué)習(xí)學(xué)習(xí).隨手做個(gè)文本編輯器來(lái)磨練下自己的手藝。

創(chuàng)新互聯(lián)建站是一家專(zhuān)注于網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計(jì),神農(nóng)架林區(qū)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:神農(nóng)架林區(qū)等地區(qū)。神農(nóng)架林區(qū)做網(wǎng)站價(jià)格咨詢(xún):18980820575
定好目標(biāo)要做個(gè)文本編輯器后,就可以開(kāi)始coding了。一個(gè)極簡(jiǎn)的文本編輯器,只需要打開(kāi)文本,編輯文本,保存,退出這么幾個(gè)簡(jiǎn)單的功能(這里暫時(shí)不考慮編碼,文件內(nèi)容查找之類(lèi)的問(wèn)題)。
簡(jiǎn)單直接粗暴有效的function
- #-*-coding:utf8 -*-
- __version__=0.1
- __author__ ="Alycat"
- import sys
- class Note():
- '''''
- This fname is file name with full path
- '''
- def openFile(self,fname=None):
- if fname is None:
- return -1
- self.fname = fname
- file = open(fname,'r+')
- content = file.read()
- file.close()
- return content
- def saveFile(self,content=None):
- if content is None:
- return -1
- file=open(self.fname,'w')
- file.write(content)
- file.flush()
- file.close()
- return 0
- def exit(self):
- sys.exit(0)
這個(gè)文本編輯器最終形態(tài)必定不是運(yùn)行在黑窗口下類(lèi)似Vi和Emasc的存在,所以在以后會(huì)慢慢給她添上GUI.以上的code將會(huì)作為文本編輯這個(gè)應(yīng)用的功能模塊,所以修改文本內(nèi)容將緩存在UI里。
習(xí)慣了java,下意識(shí)在function外圍上了class,實(shí)際上需要這個(gè)class么? 從python的在線(xiàn)文檔這里 (oschina居然可以直接看doc,點(diǎn)贊)可以看到,在import module時(shí)會(huì)做2件事,查詢(xún)并初始化這個(gè)目標(biāo)module然后在當(dāng)前腳本定義該module的名字。
既然是功能模塊,那么象open,save,exit這些功能能不能直接用而不需要初始化Note這個(gè)對(duì)象呢?這個(gè)問(wèn)題暫時(shí)放在一邊,這個(gè)編輯器到現(xiàn)在只有幾個(gè)簡(jiǎn)單的功能連UI都還沒(méi)有,接下來(lái)就開(kāi)始做個(gè)界面。
在大多數(shù)情況下,開(kāi)發(fā)一個(gè)本地應(yīng)用最簡(jiǎn)單的做法就是界面綁定功能,先做出界面再配合界面完善功能.在Python里做界面有幾種做法,官方的Lib中默認(rèn)的GUI庫(kù)是用Tcl/Tk,在這里有相關(guān)的介紹.其次用的比較廣泛的是wxPython,PyQT等等. 為了配合我們編輯器簡(jiǎn)單粗暴的做法,我們就使用官方自帶的GUI庫(kù)來(lái)定制界面.對(duì)剛才的代碼添加上簡(jiǎn)單的界面:
- #-*-coding:utf8 -*-
- __version__ = 0.1
- __author__ = "Alycat"
- import sys
- from Tkinter import *
- class Note():
- def __init__(self):
- self.tk=Tk()
- self.createUI()
- self.tk.mainloop()
- def createUI(self):
- #create menu
- menubar=Menu(self.tk)
- fmenu=Menu(menubar,tearoff=0)
- fmenu.add_command(label='Open')
- fmenu.add_command(label='Save')
- fmenu.add_command(label='Exit')
- menubar.add_cascade(label="File", menu=fmenu)
- self.tk.config(menu=menubar)
- self.text=Text()
- self.text.pack()
- '''''
- The fname is file name with full path
- '''
- def openFile(self,fname=None):
- if fname is None:
- return -1
- self.fname = fname
- file = open(fname,'r+')
- content = file.read()
- file.close()
- return content
- def saveFile(self,content=None):
- if content is None:
- return -1
- file=open(self.fname,'w')
- file.write(content)
- file.flush()
- file.close()
- return 0
- def exit(self):
- sys.exit(0)
- if __name__ == '__main__':
- Note()
這是UI截圖:
看著象點(diǎn)樣子了吧,這里用到了Menu和Text這2個(gè)Widget,具體的介紹可以看官方文檔。
接下來(lái)就是把UI和之前的功能銜接起來(lái),這里需要有一個(gè)地方需要做些修改,在保存和打開(kāi)文件時(shí),需要用戶(hù)去定位文件路徑和文件名。廢話(huà)少說(shuō),繼續(xù)粗暴的路線(xiàn):
- #-*-coding:utf8 -*-
- __version__=0.1
- __author__ ="Alycat"
- import sys,tkFileDialog,os
- from Tkinter import *
- class Note():
- def __init__(self):
- self.tk=Tk()
- self.createUI()
- self.tk.mainloop()
- def createUI(self):
- #create menu
- menubar=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()
- def save(self):
- txtContent = self.text.get(1.0,END)
- self.saveFile(content=txtContent)
- def open(self):
- self.filename = tkFileDialog.askopenfilename(initialdir = os.getcwd())
- filecontent=self.openFile(fname=self.filename)
- if filecontent is not -1:
- self.text.delete(1.0,END)
- self.text.insert(1.0,filecontent)
- '''''
- The fname is file name with full path
- '''
- def openFile(self,fname=None):
- if fname is None:
- return -1
- self.fname = fname
- file = open(fname,'r+')
- content = file.read()
- file.close()
- return content
- def saveFile(self,content=None):
- if content is None:
- return -1
- file=open(self.fname,'w')
- file.write(content)
- file.flush()
- file.close()
- return 0
- def exit(self):
- sys.exit(0)
- if __name__ == '__main__':
- Note()
到這里,一個(gè)極其簡(jiǎn)陋的文本編輯器已經(jīng)完成,但是這不是最終形態(tài),之后將陸續(xù)對(duì)這個(gè)簡(jiǎn)單粗暴的文本編輯器進(jìn)行改造優(yōu)化。
分享名稱(chēng):生命在于折騰:用Python寫(xiě)一個(gè)編輯器
當(dāng)前網(wǎng)址:http://m.5511xx.com/article/dhccjcs.html


咨詢(xún)
建站咨詢(xún)
