讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 6.4 選擇你的口味 >

6.4 選擇你的口味

我們將舉一個挑選冰淇淋口味的例子來學習利用 EasyGui 從用戶得到輸入(冰淇淋口味)的不同方法。

有多個按鈕的對話框

下面來創建一個包含多個按鈕的對話框(如消息框)。具體做法是使用一個按鈕框(button box ,buttonbox)。下面來建立一個程序,而不是在交互模式中完成。

在 IDLE 中新建一個文件。鍵入代碼清單 6-1 中的程序。

代碼清單 6-1 使用按鈕得到輸入

方括號中的代碼稱為一個列表(list)。我們還沒有討論列表,這部分內容將在第 12 章介紹。對現在來說,只需要鍵入這些代碼,讓這個 EasyGui 程序能夠工作(如果你確實很好奇,也可以跳到第 12 章看個究竟……)。

保存文件(我的文件就命名為 ice_cream1.py),運行這個程序,你就會看到下邊這個界面。

然後,根據你選擇的口味,你會看到下圖這樣的結果了。

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

選擇框

下面來看用戶選擇口味的另一種方法。EasyGui 提供了一種選擇框(choice box,choicebox),它會顯示一個選擇列表。用戶可以選擇其中之一,然後點擊 OK 按鈕。

要嘗試選擇框,只需要對代碼清單 6-1 中的程序做一個很小的修改:把 buttonbox 改為 choicebox。這個新版本的程序見代碼清單 6-2。

代碼清單 6-2 使用選擇框得到輸入

import easyguiflavor = easygui.choicebox(\"What is your favorite ice cream flavor?\",   choices = [\'Vanilla\', \'Chocolate\', \'Strawberry\'] )easygui.msgbox (\"You picked \" + flavor)  

保存代碼清單 6-2 中的程序並運行。你會看到類似下圖的結果。

選擇一個口味然後點擊 OK 時,你會看到與前面相同的消息框。注意,除了用鼠標點擊選擇,還可以用鍵盤上的上下箭頭鍵選擇一個口味。

如果點擊 Cancel,程序會結束,你還會看到一個錯誤。這是因為程序的最後一行希望得到某個文本(如 Vanilla),倘若你點擊 Cancel,它將得不到任何輸入。

我也遇到了同樣的問題。不過因為在這本書裡放上這個巨大的選擇框不太合適,所以我耍了點小聰明,稍稍做了點處理!我修改了 easygui.py,讓選擇框變小一些,這樣放在這本書裡看上去會好一些。你不需要這麼做,但如果你確實想試試看,下面我就把步驟告訴你。不過提醒你一句,這可有點複雜哦!

1. 找出 easygui.py 文件中以 def__choicebox 開頭的一節(在我的 easygui.py 中大約在 934 行)。要記住,大多數編輯器,都會在靠近窗口最下面的某個位置顯示出代碼行號。

2. 從這個位置向下大約 30 行(大概是 970 行),會看到類似下面的代碼行:

root_width = int((screen_width * 0.8))root_height = int((screen_height * 0.5))  

3. 把 0.8 改為 0.4,再把 0.5 改成 0.25。保存對 easygui.py 做的這些修改。下一次運行程序時,選擇框窗口就會小一些了。

文本輸入

這一章中的例子允許用戶從你(程序員)提供的一組選項中做出選擇。如果你想像 raw_input 一樣(也就是讓用戶鍵入文本),該怎麼做呢?這樣用戶就可以輸入自己喜歡的任何口味了。EasyGui 提供了一種輸入框(enter box ,enterbox)能夠做到這一點。可以試試代碼清單 6-3 中的程序。

代碼清單 6-3 使用輸入框得到輸入

import easyguiflavor = easygui.enterbox(\"What is your favorite ice cream flavor?\")easygui.msgbox (\"You entered \" + flavor)  

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

然後鍵入你最喜歡的口味,點擊 OK,就像前面一樣,你鍵入的內容會顯示在消息框中。

這就類似於 raw_input,同樣可以從用戶得到文本(一個字符串)。

默認輸入

有時用戶輸入信息時,可能會期望得到某個答案,或者有一個很常見或最可能輸入的答案。這稱為默認值(default)。這個最常見的答案可以由你為用戶自動輸入,這樣用戶就不用再鍵入了。有了默認值,只有當用戶有不同的輸入時才有必要鍵入。

要在一個輸入框中放入默認值,可以按照代碼清單 6-4 修改你的程序。

代碼清單 6-4 如何建立默認參數

現在運行這個程序時,輸入框中已經輸入了「Vanilla」(香草)。可以把它刪掉,再輸入你想要的內容,不過如果你最喜歡的口味確實是香草,就不用再鍵入任何內容,只需點擊 OK。

數字呢

如果想在 EasyGui 中輸入一個數,完全可以先通過輸入框得到一個字符串,然後使用 int 或者 float 由這個字符串創建一個數(就像第 4 章中的做法一樣)。

EasyGui 還提供了一種整數框(integer box ,integerbox),可以用它來輸入整數。還可以對所輸入的數設置一個下界和上界。

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