03.05 木辛老師重新啟程,帶著大家一起免費學習Python開發新技能


木辛老師今天給大家帶來了有可能是Python自帶庫中最輕量級的擴展。你有沒有興趣看看?


請點擊右上角“關注”按鈕關注我們喲:跟著木辛老師學習Python編程知識,變身快樂的編程達人吧~


歡迎來到木辛老師的Python和Tkinter編程課堂。從今天開始,木辛老師會不定期發出有關Tkinter的圖文學習課程,歡迎大家收看。


在這個個圖文課程系列中,我們會給大家講解如何使用Tkinter庫,並通過幾個小例子深入瞭解這個簡單、但是功能強大的“玩具”。

使用Tkinter庫並不需要安裝,因為在大多數的情況下,如果你已經成功的安裝了Python,那麼就可以直接使用Tkinter了。

所以,使用Tkinter庫可以快速的完成圖形化應用的開發,同時你也可以將它分享給別人,和他們一起享受Tkinter帶來的快樂吧。


木辛老師重新啟程,帶著大家一起免費學習Python開發新技能


啟程

那讓我們開始吧。


在正式開始之前,木辛老師需要聲明一下:本系列內容採用的是Python3.7.4版本。


木辛老師重新啟程,帶著大家一起免費學習Python開發新技能


如果你正在使用Python2.x的版本,請注意他們中間的區別。

所以,在我們的課程裡,導入Tkinter,使用的是:

<code>import tkinter。/<code>

而,如果是用Python2.x的同學,導入Tkinter會這麼寫:

<code>import Tkinter 。/<code>


現在,你可以打開本地的IDLE工具(如何還沒有安裝好Python和IDLE,請移步木辛老師關於Python安裝的教程。)

然後輸入如下指令:

<code>>>> import tkinter/<code>
<code>>>> tkinter.TkVersion/<code>
<code>8.6/<code>
<code>>>>/<code>


這兩天命令的作用一共有兩個:

(1)檢測一下本地Tkinter是否正常

(2)得到Tkinter的版本,(不同版本之間可能會有細微的差別,如果碰到木辛老師會給大家提醒的)


木辛老師重新啟程,帶著大家一起免費學習Python開發新技能


豐富的Tkinter結構

Tkinter庫包含很多類,這些類被稱為組件。

組件是用來做什麼用的呢?

是應用程序圖形化部分的組成部分,包括主窗口、按鈕、菜單、對話框等等。


木辛老師重新啟程,帶著大家一起免費學習Python開發新技能


每一個應用程序都需要一個主窗口,是用戶認識軟件,操作軟件的主要對象。有了它,用戶才能開始瞭解當前這個軟件。主窗口是一個應用程序最為重要的部分。

所以,使用Tkinter庫的時候,它會自動為你創建一個空白的主窗口,之後任由你來粉飾,而完成這一切的背後是一個叫做TK的“東東”,它可以說是整個庫的靈魂。


TK控件包含很多窗口的屬性,比如說應用程序中頂部某個按鈕的文本、應用程序窗口尺寸、窗口位置、是否可以改變窗口大小等等。


鑑於TK擁有這麼些個“吸引人”的屬性,很多程序員們喜歡直接創建TK的子類,然後作為其程序的主類使用。縱觀很多使用Tkinter的程序員的代碼,針對這個特殊的情況,你可以發現很多有趣的事情,比如起名字。

有的喜歡叫他Root,有的喜歡叫他App,還有的會根據當前控件的用途起名,比如商品列表的話,會叫它ShoppingList。這個完全依照大家的習慣,關鍵是喜歡Tkinter就好。


好了,咱們繼續!

有了主窗口,接著就需要一些子控件填充一下。

大家一定要注意,多有的子控件都是必須依附主窗口的,如果主窗口隱藏起來了,那麼這些子控件也就看不到了;如果主窗口移動到了其他位置,那麼這些子控件也會跟著移動。

既然需要依附,是不是得有個管理他們的機制呢?


木辛老師重新啟程,帶著大家一起免費學習Python開發新技能


非常正確,子控件如果想要成功依附到主窗口中,需要遵循主窗口的“規矩”:Geometry manager。

木辛老師也不知道具體這個怎麼翻譯,再其他語言裡有稱呼它佈局管理器的,簡單來講,就是用來管理如何將子控件放到主窗口中的。

比如位置,尺寸(是否跟隨父容器變化)等等。通過這種機制,子控件在主窗口中很是和睦呢!


規矩

Tkinter中一共存在3種:

(1)pack

(2)grid

(3)place

這三個概念就更不能翻譯了,否則在編程中就會被理解的物是人非了。

大家需要記得他們的原本的名字!這樣的話也有助於大家理解這幾種概念。

這三個概念也非常簡單,大家也可以理解為他們是控件放置的三種方式吧。


pack

這是一種“佔空”放置方式,可以通過指定控件放到父控件的哪個位置來決定該控件的所在,屬性包含:上、下、左、右。對應的語句可以這麼寫:

<code>tk.Label(window, text='P', fg='red').pack(side='top')    # 上 /<code>
<code>tk.Label(window, text='P', fg='red').pack(side='bottom') # 下 /<code>
<code>tk.Label(window, text='P', fg='red').pack(side='left')   # 左 /<code>
<code>tk.Label(window, text='P', fg='red').pack(side='right')  # 右/<code>

通過參數side指定該控件的所在;另外,通過另一個參數fill指定控件的伸展方向:x代表水平方向;y代表豎直方向;而使用BOTH則代表,當前控件可以通過兩個方向伸展。

最後,還有一個布爾類型的參數:expand。

這個參數控制著當前控件是否要跟隨父控件變化而變化。


grid

這種放置方式可以叫做表格佈局,通過指定某一個單元格,將子控件放置到父控件的某個位置,這樣每個子控件佔據的區域是相同的。

當然了,可以通過設置columnspan和rowspan“指使”他們侵佔其他單元格。

這倒是很像電子表格軟件,通過行和列的值可以唯一確定一個單元格。

當然了,grid佈局方式是看不到它的邊框滴。它們都在你的“心裡”。

你也許會問,在很多時候,控件所佔的區域特別大,但是控件特別小。

那麼,這個控件具體在這塊區域的哪裡呢?

這個問題問的非常好!

Tkinter已經想到了解決辦法了。

通過常量N、S、E和W,指定控件對齊當前區域的那條邊界。N代表的是北邊(上邊)、S是南邊(下邊)、E是東邊(左邊)W代表的是西邊(右邊)。

同樣的,如果你組合一下,NE就代表的是東北方向,以此類推。


place

這種方式不是太常用,因為它比較呆板。使用place方式,需要你指定具體的座標值,而且不能自動計算動態變化後的效果。

但是,如果用到比較小的窗口應用中,比如彈出框什麼的,倒是可以用一下。不過還是不建議你使用這種佈局。


好吧,今天的課程就到這裡了。

我們今天認識了也許是Python自帶的最輕量級的GUI庫,隨著咱們學習的深入,你會發現,使用Tk開發一些程序還是很不多的選擇的。


木辛老師重新啟程,帶著大家一起免費學習Python開發新技能


小朋友們不要忘記關注我們喲 ,下期課程更精彩,請大家一起期待吧~


快樂編程,快樂成長,拜拜!


分享到:


相關文章: