退屈だったので、長い間楽しみにしていたpythonを学びたいと思いました。スキルを磨くためにテキストエディタを作りたいです。
テキストエディタを作るという目標を設定したら、コーディングを始めましょう。ミニマリストのテキストエディタは、テキストを開き、テキストを編集し、保存し、終了するだけのシンプルな機能です。
シンプル、直接的、効果的な機能
#-*-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)
このテキストエディタの最終形態は、ViとEmascの存在に似た黒いウィンドウで実行してはならないので、将来的にはゆっくりと彼女のGUIを追加します。 上記のコードは、このアプリケーションの機能モジュールのテキストエディタとして使用されますので、テキストの内容は、UIにキャッシュされます変更します。
私はjavaに慣れていて、無意識のうちに関数の周りにクラスを付けていますが、実際にこのクラスは必要なのでしょうか? pythonのオンラインここで 見ると、モジュールをインポートするときにやるべきことは2つあり、対象のモジュールを照会して初期化することと、現在のスクリプトでモジュール名を定義することです。
関数モジュールなので、open, save, exitのように、Noteオブジェクトを初期化することなく、これらの関数を直接使うことができるのでしょうか?この問題はひとまず置いておいて、エディタはまだいくつかの簡単な機能しかなく、UIもまだなので、次のステップはインターフェイスを作り始めることです。
ほとんどの場合、ネイティブアプリケーションを開発する最もシンプルな方法は、インターフェイスに機能をバインドすることです。Pythonでインターフェイスを作るにはいくつかの方法があり、公式LibのデフォルトのGUIライブラリはTcl/Tkで、ここで説明されています。次に広く使われているのは wxPython や PyQT などです。 エディタのシンプルさに合わせるため、公式のGUIライブラリを使ってインターフェースをカスタマイズします。シンプルなインターフェースをコードに追加するだけです:
#-*-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のスクリーンショットです:
少し似ていますが、ここではこの2つのWidgetのMenuとTextを使用し、具体的な紹介は公式ドキュメントをご覧ください。
次のステップは、UIと機能を接続することです、ここでいくつかの変更を行う必要がある場所を持っている必要があり、ファイルを保存して開くには、ユーザーがファイルパスとファイル名を検索する必要があります。ナンセンス、ルートを続行します:
#-*-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()
ここでは、非常にシンプルなテキストエディタが完成していますが、これは最終形ではなく、シンプルなテキストエディタが変形され、最適化された後です。