翻译改编自官方文档:http://easygui.sourceforge.net/tutorial/index.html
翻译改编者:小甲鱼,本文欢迎转载,转载请保证原文的完整性!
演示使用 Python 3.3.3 版本
0. 安装 EasyGui
官网:http://easygui.sourceforge.net
最新版: easygui-0.96.zip
使用标准方法安装:
- 使用命令窗口切换到easygui-docs-0.96的目录下
- 【Windows下】执行C:\Python33\python.exe setup.py install
- 【Linux或Mac下】sudo /usr/bin/python33 setup.py install
1. 建议不要在 IDLE 上运行 EasyGui
EasyGui 是运行在 Tkinter 上并拥有自身的事件循环,而 IDLE 也是 Tkinter 写的一个应用程序并也拥有自身的事件循环。因此当两者同时运行的时候,有可能会发生冲突,且带来不可预测的结果。因此如果你发现你的 EasyGui 程序有这样的问题,请尝试在 IDLE 外去运行你的程序。
2. 一个简单的例子
在 EasyGui 中,所有的 GUI 互动均是通过简单的函数调用,下边一个简单的例子告诉你 EasyGui 确实很 Easy!
import easygui as g
import sys
while 1:
g.msgbox("嗨,欢迎进入第一个界面小游戏")
msg = "请问你希望在鱼C工作室学习到什么知识呢"
title="小游戏互动"
choices=["谈恋爱","编程","OOXX","琴棋书画"]
choice=g.choicebox(msg,title,choices)
#note that we convert choice to string,in case
#the user cancelled the choice,and we got None
g.msgbox("你的选择是:"+str(choice),"结果")
msg="你希望重新开始小游戏吗?"
title=" 请选择"
if g.ccbox(msg,title): #show a Contiue/Cancel dialog
pass #user chose Contonue
else:
sys.exit(0) #user chose Cancel
3. EasyGui 的各种功能演示
要运行 EasyGui 的演示程序,在命令行调用 EasyGui 是这样的:
C:\Python33\python.exe easygui.py
或者你可以从 IDE(例如 IDLE, PythonWin, Wing, 等等)上来调用:
>>> import easygui as g
>>> g.egdemo()
成功调用后你将可以尝试 EasyGui 拥有的各种功能,并将你选择的结果打印至控制台。
4. 导入 EasyGui
为了使用 EasyGui 这个模块,你应该先导入它。最简单的导入语句是:
import easygui
如果你使用上面这种形式导入的话,那么你使用 EasyGui 的函数的时候,必须在函数的前面加上前缀 easygui,像这样:
easygui.msgbox(...)
另一种选择是导入整个 EasyGui 包:
from easygui import *
这使得我们更容易调用 EasyGui 的函数,你可以直接这样编写代码:
msgbox(...)
第三种方案是使用类似下边的 import 语句:
import easygui as g
这样可以让你保持 EasyGui 的命名空间,同时减少你的打字数量。导入之后你就可以这么调用 EasyGui 的函数:
g.msgbox(...)
5. 使用 EasyGui
一旦你的模块导入 EasyGui,GUI 操作就是一个简单的调用 EasyGui 函数的几个参数的问题了。
例如,使用 EasyGui 来实现著名的“你好,世界!”程序是这样的:
import easygui as g
g.msgbox("Hello, world!")
6. EasyGui 函数的默认参数
对于所有函数而言,前两个参数是消息和标题。按照这个规律,在某种情况下,这可能不是最有利于用户的安排(例如,对话框在获取目录和文件名的时候忽略消息参数),但我觉得保持这种一致性贯穿于所有的窗口部件是一种更为重要的考虑!
绝大部分的 EasyGui 函数都有默认参数,几乎所有的组件都会显示一个消息和标题。标题默认是空字符串,信息通常有一个简单的默认值。
这使得你可以尽量少的去设置参数,比如 msgbox() 函数标题部分的参数就是可选的,所以你调用 msgbox() 的时候可以只指定一个消息参数,例如:
>>> msgbox('我爱小甲鱼^_^')
当然你也可以指定标题参数和消息参数,例如:
>>> msgbox('我爱小甲鱼^_^', '鱼油心声')
在各类按钮组件里,默认的消息是"Shall I continue?",所以你可以不带任何参数地去调用它们。这里我们演示不带任何参数地去调用 ccbox(),当选择"cancel"或关闭窗口的时候返回一个布尔类型的值:
if ccbox():
pass # user chose to continue
else:
return # user chose to cancel
7. 使用关键字参数调用 EasyGui 的函数
调用 EasyGui 函数还可以使用关键字参数哦。(如忘了的童鞋翻出《零基础入门学习Python》第18讲自行脑补)
现在假设你需要使用一个按钮组件,但你不想指定标题参数(第二个参数),你仍可以使用关键字参数的方法指定 choices 参数(第三个参数),像这样:
>>> choices = ['愿意', '不愿意', '有钱的时候愿意']
>>> reply = choicebox('你愿意购买资源打包支持小甲鱼吗?', choices = choices)
8. 使用按钮组件
根据需求,EasyGui 在 buttonbox() 上建立了一系列的函数供调用。
8.1 msgbox()
msgbox(msg='(Your message goes here)', title=' ', ok_button='OK', image=None, root=None)
msgbox() 显示一个消息和提供一个"OK"按钮,你可以指定任意的消息和标题,你甚至可以重写"OK"按钮的内容。
以下是 msgbox() 的实例函数:
def msgbox(msg="(Your message goes here)", title="", ok_button="OK"):
....
重写"OK"按钮最简单的方法是使用关键字参数:
>>> msgbox("我一定要学会编程!", ok_button="加油!")
8.2 ccbox()
ccbox(msg='Shall I continue?', title=' ', choices=('Continue', 'Cancel'), image=None)
ccbox() 提供一个选择:Continue 或者 Cancel,并相应的返回 1(选中Continue)或者 0(选中Cancel)。
注意 ccbox() 是返回整型的 1 或 0,不是布尔类型的 True 或 False。但你仍然可以这么写:
if ccbox('要再来一次吗?', choices=('要啊要啊^_^', '算了吧T_T')):
msgbox('不给玩了,再玩就玩坏了......')
else:
sys.exit(0) # 记得先 import sys 哈
8.3 ynbox()
ynbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None)
同上,都不知作者设计这两玩意儿搞啥......
8.4 buttonbox()
buttonbox(msg='', title=' ', choices=('Button1', 'Button2', 'Button3'), image=None, root=None)
可以使用 buttonbox() 定义自己的一组按钮,buttonbox() 会显示一组你定义好的按钮。
当用户点击任意一个按钮的时候,buttonbox() 返回按钮的文本内容。如果用户取消取消或者关闭窗口,那么会返回默认选项(第一个选项)。请看例子:
8.5 indexbox()
indexbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None)
基本跟上边一样,区别就是当用户选择第一个按钮的时候返回序号 0, 选择第二个按钮的时候返回序号 1。
8.6 boolbox()
boolbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None)
如果第一个按钮被选中则返回 1,否则返回 0。
9. 如何在 buttonbox 里边显示图片
当你调用一个 buttonbox 函数(例如 msgbox(), ynbox(), indexbox() 等等)的时候,你还可以为关键字参数 image 赋值,这是设置一个 .gif 格式的图像(注意仅支持 GIF 格式哦)
10. 为用户提供一系列选项
10.1 choicebox()
choicebox(msg='Pick something.', title=' ', choices=())
按钮组件方便提供用户一个简单的按钮选项,但如果有很多选项,或者选项的内容特别长的话,更好的策略是为它们提供一个可选择的列表。
choicebox() 为用户提供了一个可选择的列表,使用序列(元祖或列表)作为选项,这些选项显示前会按照不区分大小写的方法排好序。
另外还可以使用键盘来选择其中一个选项(比较纠结,但一点儿都不重要):
- 例如当按下键盘上的"g"键,将会选中的第一个以"g"开头的选项。再次按下"g"键,则会选中下一个以"g"开头的选项。在选中最后一个以"g"开头的选项的时候,再次按下"g"键将重新回到在列表的开头的第一个以"g"开头的选项。
- 如果选项中没有以"g"开头的,则会选中字符排序在"g"之前("f")的那个字符开头的选项
- 如果选项中没有字符的排序在"g"之前的,那么在列表中第一个元素将会被选中。
综合我们之前学习的文件功能,举个高达上的例子( 源代码在第35讲的课后作业中^_^):