我们将举一个挑选冰淇淋口味的例子来学习利用 EasyGui 从用户得到输入(冰淇淋口味)的不同方法。
有多个按钮的对话框
下面来创建一个包含多个按钮的对话框(如消息框)。具体做法是使用一个按钮框(button box ,buttonbox)。下面来建立一个程序,而不是在交互模式中完成。
在 SPE 中(如果你不使用 SPE,也可以是另一个文本编辑器)新建一个文件。键入代码清单 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,让选择框变小一些,这样放在这本书里看上去会好一些。你不需要这么做,但如果你确实想试试看,下面我就把步骤告诉你。不过提醒你一句,这可有点复杂哦!
找出 easygui.py 文件中以 def choicebox 开头的一节(在我的 easygui.py 中大约在 613 行)。要记住,大多数编辑器(包括 SPE),都会在靠近窗口最下面的某个位置显示出代码行号。
从这个位置向下大约 30 行(大概是 645 行),会看到类似下面的代码行:
root_width = int((screen_width * 0.8))root_height = int((screen_height * 0.5))
把 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 转换这个字符串。