6.4 选择你的口味

    我们将举一个挑选冰淇淋口味的例子来学习利用 EasyGui 从用户得到输入(冰淇淋口味)的不同方法。

    空标题文档 - 图1

    有多个按钮的对话框

    下面来创建一个包含多个按钮的对话框(如消息框)。具体做法是使用一个按钮框(button box ,buttonbox)。下面来建立一个程序,而不是在交互模式中完成。

    在 IDLE 中新建一个文件。键入代码清单 6-1 中的程序。

    代码清单 6-1 使用按钮得到输入

    空标题文档 - 图2

    方括号中的代码称为一个列表(list)。我们还没有讨论列表,这部分内容将在第 12 章介绍。对现在来说,只需要键入这些代码,让这个 EasyGui 程序能够工作(如果你确实很好奇,也可以跳到第 12 章看个究竟……)。

    保存文件(我的文件就命名为 ice_cream1.py),运行这个程序,你就会看到下边这个界面。

    空标题文档 - 图3

    然后,根据你选择的口味,你会看到下图这样的结果了。

    空标题文档 - 图4

    这是怎么做到的?用户点击的按钮的标签就是输入(input)。我们为这个输入指定了一个变量名,在这里就是 flavor。这就像使用 raw_input(),只不过用户并不是键入,而是点击一个按钮。这正是 GUI 的关键。

    选择框

    下面来看用户选择口味的另一种方法。EasyGui 提供了一种选择框(choice box,choicebox),它会显示一个选择列表。用户可以选择其中之一,然后点击 OK 按钮。

    要尝试选择框,只需要对代码清单 6-1 中的程序做一个很小的修改:把 buttonbox 改为 choicebox。这个新版本的程序见代码清单 6-2。

    代码清单 6-2 使用选择框得到输入
    import easygui
    flavor = easygui.choicebox("What is your favorite ice cream flavor?",
    choices = ['Vanilla', 'Chocolate', 'Strawberry'] )
    easygui.msgbox ("You picked " + flavor)

    保存代码清单 6-2 中的程序并运行。你会看到类似下图的结果。

    空标题文档 - 图5

    选择一个口味然后点击 OK 时,你会看到与前面相同的消息框。注意,除了用鼠标点击选择,还可以用键盘上的上下箭头键选择一个口味。

    如果点击 Cancel,程序会结束,你还会看到一个错误。这是因为程序的最后一行希望得到某个文本(如 Vanilla),倘若你点击 Cancel,它将得不到任何输入。

    空标题文档 - 图6

    我也遇到了同样的问题。不过因为在这本书里放上这个巨大的选择框不太合适,所以我耍了点小聪明,稍稍做了点处理!我修改了 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))

    1. 把 0.8 改为 0.4,再把 0.5 改成 0.25。保存对 easygui.py 做的这些修改。下一次运行程序时,选择框窗口就会小一些了。

    文本输入

    这一章中的例子允许用户从你(程序员)提供的一组选项中做出选择。如果你想像 raw_input() 一样(也就是让用户键入文本),该怎么做呢?这样用户就可以输入自己喜欢的任何口味了。EasyGui 提供了一种输入框(enter box ,enterbox)能够做到这一点。可以试试代码清单 6-3 中的程序。

    代码清单 6-3 使用输入框得到输入
    import easygui
    flavor = easygui.enterbox("What is your favorite ice cream flavor?")
    easygui.msgbox ("You entered " + flavor)

    运行这个程序时,你会看到:

    空标题文档 - 图7

    然后键入你最喜欢的口味,点击 OK,就像前面一样,你键入的内容会显示在消息框中。

    这就类似于 raw_input(),同样可以从用户得到文本(一个字符串)。

    默认输入

    有时用户输入信息时,可能会期望得到某个答案,或者有一个很常见或最可能输入的答案。这称为默认值(default)。这个最常见的答案可以由你为用户自动输入,这样用户就不用再键入了。有了默认值,只有当用户有不同的输入时才有必要键入。

    要在一个输入框中放入默认值,可以按照代码清单 6-4 修改你的程序。

    代码清单 6-4 如何建立默认参数

    空标题文档 - 图8

    现在运行这个程序时,输入框中已经输入了“Vanilla”(香草)。可以把它删掉,再输入你想要的内容,不过如果你最喜欢的口味确实是香草,就不用再键入任何内容,只需点击 OK。

    数字呢

    如果想在 EasyGui 中输入一个数,完全可以先通过输入框得到一个字符串,然后使用 int() 或者 float() 由这个字符串创建一个数(就像第 4 章中的做法一样)。

    EasyGui 还提供了一种整数框(integer box ,integerbox),可以用它来输入整数。还可以对所输入的数设置一个下界和上界。

    不过,整数框不允许输入浮点数(小数)。要输入小数,必须先通过输入框得到字符串,然后再使用 float() 转换这个字符串。