前言
近期有寫一個簡單GUI程式的點子,具體寫什麼就不說了,但一個要求就是有跨平台的功能。
確切的講,是我希望這個程式寫好後能同時在Windows和Linux下運行,而且要方便隨時修改。
對於程式設計語言,處於練習的目的,我還是選擇了Python,版本就用2.7的了,畢竟3版本個人
覺得有些不習慣。
推薦文檔
不得不承認,在文檔資源方面Tkinter的資源確實不怎麼多,但下面這個的確也夠我用了。
http://www.nmt.edu/tcc/help/pubs/tkinter.pdf
文檔是英文的,英文不行的就別抱怨了,趁早轉行吧,反正以後我會教育自己的孩子一定要學好英文的。。。
為什麼選用Tkinter
Python下有許多的GUI模組可供選擇,其中不乏比較流行和強大的模組,如wxPython。
我選擇Tkinter的原因其實很簡單:
1. Tkinter是Python安裝包裡內建的圖形庫支援包,無需額外安裝,方便
2. Tkinter是輕量級的GUI方案,輕量級的缺點是不能做太複雜的介面,我需要的只是寫擁有幾個按鈕,
幾個文字框,幾個複選框這樣的簡單GUI程式,這個Tkinter是完全可以勝任的了。輕量級的好處就是簡單。
對於我來說,快速的寫出我想要的東西是很重要的,我可不希望寫個GUI還需要先學習很長一段時間。。。
3. Python的GUI編輯器IDLE就是使用Tkinter實現的,我覺得我寫的東西應該不會比它複雜
4. 我對於GUI的外觀沒有很苛刻的要求,而且Tkinter有一個叫ttk的模組,支援本地化的主題樣式,做出來的
GUI程式並不會太醜。
Tkinter是什麼
Tkinter是由Python實現的一個Module,全稱Tk interface,它提供了使用Python方式調用Tcl/TK的庫最終達到顯示圖形化介面的目的。
Tcl/Tk本身是一個GUI圖形庫,類似於GTK以及Qt。
在Python Manual中,將Tkinter的調用層次說明了一下,我的理解如下:
使用者的Python程式 - Tkinter Module - C實現的tkinter擴充 -C/Tcl語言實現的Tk外掛程式 -Xlib
Python本身是跨平台的,Tcl/Tk圖形庫也是跨平台的,所以Tkinter也能跨平台。。。
對於Python程式員來說,並不需要詳細的瞭解Tcl/Tk這個圖形庫,當然如果能瞭解肯定對於Tkinter的編程是有幫組的。
就像Java程式員不需要瞭解C++,但如果瞭解C++對於Java程式員也是很有協助的一樣的道理。
我的目的是“快”,所以就不去仔細瞭解Tck/Tk了,我就參考推薦文檔裡的內容來做嘗試吧。
最簡單的Tkinter例子
在Tkinter 8.5 reference這個文檔中,有一個最簡單的例子:
#!/user/bin/env pythonimport Tkinter as tkclass Application(tk.Frame): def __init__(self, master=None): tk.Frame.__init__(self, master) self.grid() self.createWidgets() def createWidgets(self): self.quitButton = tk.Button(self, text='Quit', command=self.quit) self.quitButton.grid()app = Application()app.master.title('Sample application')app.mainloop()文檔中有說明每一條語句的意思,這裡我就做個翻譯的工作,加上點我自己的理解。
第1行:這是告訴Shell程式“使用什麼程式來執行這個指令碼程式”,這在Linux下的指令碼語言基本都支援這樣的語句(Windows下此句無意義),拋開它的實際意義不談,這就是一個注釋。
第2行:匯入Tkinter模組的命名空間(也就是類以及符號等內容),並將其命名空間重新對應為tk(為了編程時少打幾個字。。。)
第4行:這裡自己定義了一個名叫Application的類且指明此類是繼承自tk.Frame類的,也就是說:tk.Frame所支援的方法和成員,Application也都支援。
第5行:__init__函數是class中的一個特殊方法,類似於C++中的建構函式,通常大家就叫它建構函式
第6行:調用父類的建構函式,通常子類的建構函式都需要調用父類的建構函式,這可以說也是繼承的一個典型表現
第7行:這裡調用了一個grid方法,這是為了將程式顯示出來所需要的,文檔中有關於grid的詳細介紹,後續可能會深入瞭解,此處就不進一步深入了。
第10行:為Application建立了一個方法,此方法中建立了一個Button按鈕,並且設定了Button按鈕的屬性,如:顯示的字元為Quit,對應的命令函數為self.quit
第14行:這裡建立了一個Application類的執行個體,此執行個體一建立就會運行__init__這個方法,也就是建構函式
第15行:調用一個方法來設定視窗的標題內容為“Sample application”
第16行:這裡開始進行GUI程式的訊息迴圈,實際上類似於MFC中的主迴圈,此時GUI程式就處於死迴圈中一直等待各種訊息事件(如滑鼠,鍵盤等訊息)
程式執行後顯示的GUI介面如下:
有點醜。沒關係,人都可以整容,程式難道還不能美化,咱先關注的是內在美,先把功能實現了,有時間再做美化的工作,反正這個程式是咱自己用的。。
小結
經過查資料,以及簡單的學習,瞭解可Tkinter是個什麼東西,並對使用其搭建的GUI程式架構有了一個簡單直觀的瞭解。
到目前為止,Tkinter給我的感覺是:新鮮而直接