首页 » 父与子的编程之旅:与小卡特一起学Python » 父与子的编程之旅:与小卡特一起学Python全文在线阅读

《父与子的编程之旅:与小卡特一起学Python》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 转换这个字符串。