「6」如何使用Python建立有窗口、按鈕之類的圖形界面

Python之父

The best way to learn a programming language is to write a lotof code and read a lot of code.


到目前為止,我們的所有輸入和輸出都只是IDLE中的簡單文本。不過現代計算機和程序會使用大量的圖形。如果我們的程序中也有一些圖形就太好了。如下圖所示這些圖形。

GUI是Graphical UserInterface(圖形用戶界面)的縮寫。在GUI中,並不只是鍵入文本和返迴文本,用戶可以看到窗口、按鈕、文本框等圖形,而且可以用滑鼠點擊,還可以通過鍵盤鍵入。

我們目前為止完成的程序都是命令行或文本模式程序。GUI是與程序交互的一種不同的方式。有GUI的程序仍然有3個基本要素:輸入、處理和輸出,但它們的輸入和輸出更豐富、更有趣一些。

Advertisements

其實,我們一直都在使用GUI,像Web瀏覽器是GUI,IDLE也是GUI。現在我們來建立自己的GUI,為了做到這一點,就要從一個叫EasyGui的Python模塊尋求一些幫助。

模塊就是一種擴展方法,通過它可以向Python增加非內置的內容,這會在後面的章節內容里介紹),我們現在只需要記住,可以利用這個模塊很容易地建立簡單的GUI。

當然,在建立GUI之前,我需要安裝EasyGui,8步搞定Python EasyGui模塊安裝。

第一個GUI

我們現在來建立第一個GUI。 啟動IDLE,在交互模式鍵入以下命令:

要注意import這個關鍵字,這會告訴Python你打算使用EasyGui模式。如果沒有得到錯誤消息,說明Python找到了EasyGui模塊。如果收到一個錯誤消息,或者EasyGui看上去無效,說明EasyGui安裝有問題,你可以重新安裝EasyGui。

Advertisements

現在來建立一個包含OK按鈕的簡單消息框,在IDLE交互模式中完成如下指令:

EasyGuimsgbox()函數用於創建一個消息框。大多數情況下,EasyGui函數的名就是相應英語單詞的縮寫,所以必要的英語單詞還是需要有的,那會讓你更容易理解字面意思。

使用msgbox()時,會看到類似這樣的結果:

如果點擊OK按鈕,這個消息框會關閉。這時,可以在shell或終端或命令窗口中見到這樣的結果:

『OK』部分就是Python和EasyGui在告訴你:用戶點擊了OK按鈕。EasyGui會返回信息來告訴你用戶在GUI中做了什麼,點擊了什麼按鈕,鍵入了哪些內容等等。可以為這個響應指定一個名字(把它賦給一個變數)。試試看:

在消息框中點擊OK將它關閉。然後鍵入:

現在用戶的響應(OK)有了一個變數名user_response。

GUI輸入

我們剛才使用的是EasyGui的輸出函數msgbox(),就是一個消息框。消息框實際上只是對話框(dialogbox)的一個例子。對話框包含一些GUI元素,用來告訴用戶某些信息,或者從用戶得到一些輸入。輸入可以是按鈕點擊(如OK),或者文件名,也可以是某個文本(字元串)。現在我們來使用EasyGui得到輸入。

按鈕框(button box,buttonbox())

EasyGui buttonbox()函數用於創建一個包含多個按鈕的對話框。如下所示:

下面來建立一個程序,在IDLE文本編輯器內鍵入代碼清單6-1中的程序:

你只需要鍵入這些代碼,讓這個代碼程序能夠工作就可以了。運行這個程序后,你會看到:

選擇點擊你選擇的品味,你會看到如下結果:

這是怎麼做到的?

用戶點擊的按鈕的標籤就是輸入。我們為這個輸入指定了一個變數名,在這裡就是flavor。這就像使用raw_input(),只不過用戶並不是鍵入,而是點擊一個按鈕。這正是GUI的關鍵。

選擇框(choice box,choicebox())

EasyGuichoicebox()函數用於創建一個選擇列表的對話框。用戶可以選擇其中之一,然後點擊OK按鈕,如下所示:

下面我們仍然在IDLE文本編輯器內新鍵入代碼清單6-2中的程序:

運行這個程序,你會看到:

注意,這個列表選擇框除了用滑鼠點擊選擇,還可以用鍵盤上的上下箭頭鍵選擇一個選項。選擇一個選項,然後點擊OK時,你會看到與6-1代碼的結果相同的消息框,如下圖:

文本輸入框(enter box,enterbox())

EasyGuienterbox()函數用於創建一種讓用戶鍵入文本的輸入框。就像第5章中raw_input()一樣,讓用戶鍵入文本。我們可以試試以下6-3的代碼清單:

運行這個程序,你會看到:

鍵入你的文本,點擊OK,就像前面一樣,你鍵入的內容會顯示在消息框中。如下圖所示:

當然,有時我們會期望用戶輸入一個很常見或最有可能的信息文本。這個最常見的文本可以由你為用戶自動輸入,這樣用戶就不用再鍵入了。這就需要使用enterbox()函數中的默認值(default),有了它,只有當用戶有不同的輸入才有必要鍵入,如下面所示6-4代碼:

運行這個程序時,輸入框中已經輸入了「Chocolate」。用戶可以把它刪掉,再輸入你想要的內容,如果默認值是你需要的,就不用再鍵入任何內容,只需點擊OK即可。

整數框(integer box,integerbox())

我們知道,用戶通過enterbox()函數輸入的是一個字元串,如果想在EasyGui中輸入一個數,要怎麼實現呢?

其實,我們完全可以先通過enterbox()函數得到一個字元串,然後像第4章的類型轉換做法那樣,使用int()或者float()由這個字元串創建一個數,這樣就可以達到輸入數字的效果,我們來看下面的代碼例子:

我們在輸入框中輸入12:

返回IDLE交互模式中,查看下面代碼:

不過,對於數字的輸入,EasyGui還提供了一種整數框(integer box,integerbox())函數,可以用它來輸入整數,還可以對所輸入的數設置一個下界和上界。運行如下代碼:

我們在輸入框中輸入23:

返回IDLE交互模式中,查看下面代碼:

注意,如果我們在輸入框中輸入浮點數12.34,則會提示:

上面說明,整數框不允許輸入浮點數(小數)。要輸入小數,必須先通過EasyGuienterbox()函數輸入框得到字元串,然後再使用float()轉換這個字元串。

挑戰一下:

第1 章中,我們創建了一個簡單的猜數程序。通過這章的學習,我們試試使用EasyGui來完成這個程序的輸入和輸出。

EasyGui的一些說明

EasyGui 還提供了另外一些GUI組件,包括允許多重選擇(而不是只選擇一項)的選擇框,還有一些特殊的對話框用來得到文件名等內容。不過,對現在來說,前面介紹的GUI組件已經足夠了。

利用EasyGui,我們可以非常容易地生成一些簡單的GUI,而且它隱藏了GUI涉及的很多複雜性,使你不用再操心這些問題。後面我們將會討論建立GUI的另一種方法,它可以提供更多的靈活性和控制。

如果你想更多地了解EasyGui,可以訪問EasyGui 主頁easygui.sourceforge.net。

END

Advertisements

你可能會喜歡