David Mertz 用原始碼樣本以及詳細的說明介紹了 TK 和Tkinter 封裝器(Python 的 GUI庫)。為了更便於操作,他示範了曾在以前很多文章中使用的 Txt2Html前端程式的 GUI移植樣本。當然,他認為您會定期閱讀其專欄。
我想要向您介紹能想像到的開始 GUI 編程的最簡單方法,就是使用 Scriptics 的 TK 和 Tkinter 封裝器。我們將與 developerWorks 中的 “Python 中的 curses 編程” 提到的 curses 庫進行很多比較。除了 curses 實現文本控制台而 TK 實現 GUI 這一差別之外,這兩個庫有著驚人相似的介面。在使用任何一個庫之前,需要基本瞭解視窗和事件迴圈,並參考可用的視窗小組件。(好,好的參考和適量的練習。)
如同關於 curses 的文章,本文僅討論 Tkinter 本身的特性。既然很多 Python 發行版都帶有 Tkinter,因此可能無需下載支援庫或其它 Python 模組。本文後面的 參考資料 指向幾個更進階別的使用者介面視窗小組件的集合,但是您可以用 Tkinter 本身做許多事,包括構造自己的進階視窗小組件。學習基本 Tkinter 模組將為您引入 TK 的思維方式,即使您繼續使用更進階的視窗小組件集合,這種思維方式仍十分重要。
TK 簡要描述
TK 是與 TCL 語言關係最密切、且被廣泛使用的圖形庫,TCL 語言和 TK 都由 John Ousterhout 開發。雖然 TK 於 1991 年作為 X11 庫出現,但實際上它從那時起就被移植到每一種流行的 GUI。(它與 Python 逐漸擁有“標準”GUI 的情形相似。)現在,大多數流行語言和很多小型語言都有 TK 綁定(Tkinter 模組)。
在開始之前,我必須承認:我不是瘦小枯乾的 TK 編程專家。事實上,我的大部分 TK 編程經驗大約從我寫這篇文章三天前才開始。那三天並非沒有挑戰,但是最後我覺得很好地掌握了 Tkinter。我在這裡要說的是:TK 和 Tkinter 封裝器設計得都非常好,便於使用者操作,並且只是關於 GUI 編程最簡單的介紹。
從測試應用程式開始
我們將使用 Txt2Html,這個在以前很多專欄(請參閱 參考資料 )中使用的檔案格式轉換程式,的封裝器作為測試應用程式。雖然可以用幾種方式運行 Txt2Html,但這裡的封裝器卻要從命令列運行 Txt2Html。該應用程式以批處理進程的形式運行,並帶有指出要執行的轉換各方面特性的命令列自變數。(以後,最好為使用者提供互動式選擇螢幕選項,以在執行實際轉換之前引導使用者逐步選擇不同的轉換選項並提供所選選項的可視反饋。)
tk_txt2html 基於帶有下拉式功能表和嵌套子功能表的頂部菜單。旁邊有詳細的實現說明,它看起來與在 “Python 中的 Curses 編程” 中討論的 curses 版本很相象。雖然 TK 用較少的代碼可以實現更多的功能,但很明顯,tk_txt2html 和 curses_txt2html 很相似。例如,在 TK 中,象菜單這樣的特性可以依靠內建的 Tkinter 類實現,而無需從頭編寫。
除了設定配置選項之外,TK 封裝器還包括一個與 TK Text 視窗小組件一起構建的滾動協助框(一個帶有 Message 視窗小組件的“關於”框)和一個進行 TK 動態幾何管理的曆史視窗。與大多數互動式應用程式一樣,封裝器用 TK 的 Entry 視窗小組件接受某些使用者輸入。
在進一步討論代碼之前,讓我們看一下實際運行中的應用程式。
學習基本知識
實際上,Tkinter 程式只需做三件事:
最小的 [Tkinter] 程式
import Tkinter # import the Tkinter module
root = Tkinter.Tk() # create a root window
root.mainloop() # create an event loop
這是一個完全有效 Tkinter 程式(不要介意它沒有實際用處,因為它甚至不管理 "hello world")。該程式唯一需要做的是建立一些容納其根視窗的視窗小組件。這樣增強之後,無需程式員進一步幹涉,該程式的 root .mainloop() 方法調用就可以處理所有使用者互動。