《零基礎入門學習Python》第064講:GUI的終極選擇:Tkinter
大家回顧一下,到目前為止,幾乎我們所有的Python代碼都是基於文字交互的界面。Python的GUI工具包有很多,之前我們學過的EasyGui就是其中最簡單的一個,不過呢,EasyGui實在是太簡單了,因此,它只適合大家接受GUI編程的敲門磚,這一次,我們要講的可不是什麼二流貨色,這一次我們來講講Tkinter,Tkinter是什麼呢?它有那麼niubi嗎?
Tkinter是Python的標準工具庫,它實際上是建立在TK技術上的,TK技術最初是為TCL所設計的,TCL是一門有名的工具命令語言,但是由於其可移植性和靈活性非常強,加上非常容易使用,因此,TK技術被移植到許多腳本語言裡,包括大名鼎鼎的Perl、Ruby 和Pytho。Tkinter是Python的默認GUI庫,所以,像IDLE使用的就是Tkinter設計出來的,因此,我們直接在IDLE中導入tkinter,就可以使用了。tkinter模塊在默認安裝Python時就會自動安裝。
我們現在就來做一個例子,從最簡單的例子入手:
tk.Tk() 就讓tk 這個類生成了一個頂層窗口的實例,top level 級別的窗口,我們也成為root 窗口(根窗口);
title ,顧名思義,就是設置窗口的標題;
我們來寫一個theLbel的變量,這個變量接收tk.Label(),Label是一個組件,這個組件實例化之後,賦值到tk.Label變量中去,這個組件是放在app窗口上的,然後組件顯示文字為“我的第二個GUI程序”。(Label組件基本上是最常用的組件了,可以用來顯示文本,圖像,圖標等)
theLabel.pack():用於自動調節組件自身的尺寸和位置
app.mainloop():是窗口的主事件循環,這基本是使用tkinter 的GUI程序的最後一行代碼,因為進入了主事件循環之後,就由tkinter接管一切,也就是說,一旦執行了這行代碼,就不再由代碼做主了,而是由tkinter 來響應用戶的輸入(例如,用戶按下一個按鈕,tkinter就會感受到,然後就會響應你為這個事件安排好的方法,由tkinter來調用你的函數。)
運行結果如下:(這是拉大之後的效果)

我們接下來繼續寫一個進階版的代碼:
學到現在,大家應該知道了,通常如果你想要寫一個比較大的程序,那麼你應該把代碼封裝起來,在面向對象的編程語言中,就是封裝成類。
我們把 GUI 封裝成類,類名為App。首先,我們要實例化tk.Tk(),創建一個root 窗口,這裡我們直接命名變量為root,然後實例化App,把root 作為參數,最後就是root.mainloop() 主事件循環。
因此我們知道在類App裡,需要使用構造函數來寫入參數,我們開始寫__init__()方法,傳入的參數我們給master,我們使用tk.Frame框架,那麼框架是什麼呢?框架一般是用於在復雜的佈局裡面,將這些組件進行分組。然後使用pack()方法字典自動調整位置,暫時我們還不要人為乾預,等會我們再操作。接下來,創建一個按鈕組件,使用tk.Button()方法,這個按鈕就放在frame框架中,按鈕文本為“打招呼”,fg(Foreground)設置前景色,另外,bg設置背景色。self.hi_there.pack()就是自動調整按鈕的位置。
運行結果如下:

我們點擊按鈕,但是沒有任何響應,這是因為我們還沒有給它寫響應的代碼。
這裡我們就來寫一個點擊按鈕會執行的代碼:
我們寫了一個say_hi()的方法,一定記得,在tk.Button()中加多一個參數command,command =你點擊按鈕之後要執行的函數名。
我們再次運行代碼,當我們按下“打招呼” 按鈕時,在IDLE 窗口中就會打印:
接下來,有人就會有進一步的要求了,你這個按鈕的位置總是顯示在最上邊,可以修改它的位置嗎?
可以的,因為這裡的pack()方法是自動會調整對應的組件或者框架的位置,默認是調整在最上邊(top),它一共有4個位置:
'left', 'right', 'top','bottom'
例如,我們改一下代碼:
frame.pack(side='left')
或者
frame.pack(side=tk.LEFT) #不建议

我們還不想讓這個按鈕挨著邊,我們可以通過設置pack() 方法的padx 和pady 參數來實現:
frame.pack(side='left', padx = 10, pady = 10)

今天這就是所有的內容了,主要就是接觸一下tkinter,下一節課開始我們就來仔細講解每個組件的功能以及如何使用。
0 留言:
發佈留言