<a href="#%E5%89%8D%E8%A8%80">前言</a>
<a href="#%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%82%B9">基礎知識點</a>
<a href="#%E5%89%8D%E5%AF%BC%E7%AF%87">前導篇</a>
<a href="#button%E7%AF%87">Button篇</a>
<a href="#label%E7%AF%87">Label篇</a>
<a href="#entry%E7%AF%87">Entry篇</a>
<a href="#%E5%85%B6%E4%BB%96%E6%8E%A7%E4%BB%B6">其他控件</a>
<a href="#%E4%BA%8B%E4%BB%B6%E7%AF%87">事件篇</a>
<a href="#%E5%B0%8F%E5%BA%94%E7%94%A8">小應用</a>
<a href="#%E6%80%BB%E7%BB%93">總結</a>
之前寫過一個關于Python 使用easyUI建立桌面小應用的部落格,雖然easyUI很實用,但是安裝方面确實存在一些小小的問題。那麼好吧,這次就嘗試着使用自帶的Tkinter好了。
另外不得不說的是,Windows環境下寫界面還是用C++或者C#的好,天生自帶優勢,界面也更加美觀。
下面就一些基礎的空間簡要的描述一下,以及它們的簡單應用。
要想寫界面,就得有個載體不是。這就好比說我們要蓋個房子,光有磚頭,瓦塊,木材是肯定不行的。我們還需要一個架構,一個承載這些元件的”平台”。
在Tkinter中,同樣如此。而且建立這麼一個“架構”也很簡單,如下代碼。
運作一下,結果圖如下
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CXupEWalWOtJGcONTY5Z0VUZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DNwcTNwIzM2ETMyQDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
按鈕對于一個桌面應用來說是最最常見,也必不可少的一塊“磚頭”了。但是在寫界面的時候,我們沒有見過單獨一個按鈕就可以跑起來的吧。就好比磚頭需要蓋在房子裡。是以button需要依附于一個架構,也就是剛才的platform。
源碼中是這樣解釋的。
也就是說button需要有一個parent控件。那麼下面我們來看下代碼。
如下
需要注意的是<code>Button(platform, text='我是一個按鈕').pack()</code>這行代碼的pack方法,其作用是将按鈕“夯”進platform,讓它能顯示出來。不然的話,磚頭始終是磚頭,成不了房子的一部分。如果沒有這個方法的話,元件是不會顯示的。pack方法可以傳入slide參數來指定其靠齊方式。如side=LEFT啥的。
button元件除了
- text(按鈕上顯示的文本)
- width(寬度)
- height(按鈕的高度)
- compound(依附方位)
等之外。還有一個比較重要的屬性,那就是command。這就是響應按鈕被點選的時候的回調函數。說白了就是 點選按鈕之後會觸發什麼響應事件。下面我們來看個小小的例子。
這樣就可以啦。也許你會想,為啥callback沒有參數啊,我想在點選按鈕的時候傳一個參數來改變一些行為怎麼辦呢?
關于這塊,我也檢視了一下官方文檔,發現确實沒有相關的api可以被直接的調用。但是有下面這種間接的方式實作。
結果如下
标簽,同樣是很簡單的一個控件。使用方法和button控件一緻。
更多屬性設定可以參考官方文檔,或者直接點進去源碼檢視。
沒有輸入控件的界面是不完整的界面,下面淺談一下entry控件的基本使用。
結果如下:
關于這個輸入控件常用的方法有這麼幾個:
get() 擷取目前這個空間的字元内容。
select_clear() 清空目前被選擇的輸入控件的内容,如果目前輸入控件沒有獲得滑鼠焦點,則不會有什麼影響。
… …
其他的控件的使用方式都是類似的,學會了前幾個,相信對于後面的也不是什麼難事了。
有興趣的話可以參考官方的幫助文檔。
<a href="https://docs.python.org/2/library/tkinter.html">https://docs.python.org/2/library/tkinter.html</a>
下面介紹一下關于界面的事件處理篇。因為我在一開始使用的時候沒能成功,也是從各處搜尋才找到答案。是以介紹一下,也為了讓更多的人少走彎路。
我自己的了解是Tkinter把關于界面的所有的事件都封裝成了一個對象,我們可以友善的從這個對象中擷取到已經發生的事件,然後隻需要針對不同的事件作出相應的處理即可。
這裡簡單的介紹一下對于鍵盤事件的處理吧。
一般來說隻需要一個下面一個方法:
下面針對一個小例子進行講解。
運作的時候我們按下鍵盤上的方向鍵左鍵,就會列印對應的處理内容。右鍵類似。
關于bind_all方法,第一個參數對應的内容很多。我在這裡盡可能把常用的羅列一下,免得大家再去單獨搜尋。
<code>bind_all('<KeyPress-Up>', eventhandler)</code> 鍵盤方向鍵上鍵
<code>bind_all('<KeyPress-Down>', eventhandler)</code> 鍵盤方向鍵下鍵
<code>bind_all('<KeyPress-Left>', eventhandler)</code> 鍵盤方向鍵左鍵
<code>bind_all('<KeyPress-Right>', eventhandler)</code> 鍵盤方向鍵右鍵
<code>bind_all('<KeyPress>', eventhandler)</code> 鍵盤鍵位通用處理
<code>bind_all('<Enter>', eventhandler)</code> 按下Enter鍵
<code>bind_all('a', eventhandler)</code> 鍵盤小寫字母a
<code>bind_all('A', eventhandler)</code> 鍵盤大寫字母A
<code>bind_all('<Control-A>', eventhandler)</code> Control+shift+a
<code>bind_all('<Control-a>', eventhandler)</code> Control+a
<code>bind_all('<Control-Alt-b>', eventhandler)</code> Control+Alt+b
相似的,Tkinter支援下面這些按鍵。但是需要知道的是不支援
學完了上面的這些控件及其需要注意的地方,寫一個簡單的桌面小應用就足夠了。
下面以一個小例子來收尾,功能是爬取糗事百科上的段子資訊。
使用方式: 界面運作按下鍵盤的方向鍵即可操作。↑←代表檢視上一個段子。↓→代表檢視下一個段子。
運作效果如下面的GIF圖。 糗事百科簡易粗糙桌面版本。
一般來說我們不會用Python來寫界面,但是為了以防萬一,了解一下還是不錯的。
這篇文章雖然算不上事無巨細,但是基本上看完之後就可以實戰自己的小桌面應用了。
那麼今天就先到這吧。