前面所介绍的easygui中的对话框,除了msgbox外,基本都是可以接收用户输入或者可以让用户进行选择的。如果不需要用户输入,且只有有限的几个选项供用户选择,那么可以用更加直观的两个对话框:buttonbox和indexbox。buttonbox和indexbox都可以自己设置若干个按钮让用户选择,他们的区别主要在于buttonbox返回的是按钮上的文字,而indexbox返回的是按钮的索引。它们的原型如下:
buttonbox(msg='',title=' ',choices=('Button[1]','Button[2]','Button[3]'),image=None,images=None,default_choice=None,cancel_choice=None,callback=None,run=True)
indexbox(msg='Shall I continue?',title=' ',choices=('Yes','No'),image=None,default_choice='Yes',cancel_choice='No')
其中,buttonbox可以指定一张图片(通过image参数)或者多张图片(通过images参数),并且图片也会当做按钮,可以点击,返回图片的文件名。但需要注意的是,image参数和images参数同时只能使用一个,指定了image参数就不能使用images参数,反之亦然。而indexbox只能指定一张图片,并且图片名称必须也在choices列表或者tuple中,否则点击图片返回的时候,会抛出异常(主要的原因是我们可能需要通过返回的索引来获取对应的按钮文字值或图片名称,所以这里会强制将图片包含到choices列表或元祖中)。两者还有一个重要的区别是buttonbox可以指定callback回调函数,但indexbox不可以。
下面我们来看一下两者的使用示例。
from easygui import *
choices = ('Scratch', '乐高','Python','C++');
a = indexbox(msg='请选择开设的课程', title='选择课程', choices=choices, image='python.png', default_choice='Yes', cancel_choice='No')
print(choices[a])
它的运行效果如下:
注意程序中我们指定了一张图片作为选项,所以正确的做法是需要在choices列表或者元组中将图片文件名也包含进去,而程序中并没有,因此当点击图片的时候,将会发生以下异常:
AssertionError: There is a program logic error in the EasyGui code for indexbox.
以上程序可以在下面页面直接运行,读者可以直接在此页面上修改查看效果。
buttonbox的用法也类似,我们直接来看例子:
from easygui import *
choices = ('Scratch', '乐高','Python','C++');
a = buttonbox(msg='请选择开设的课程', title='选择课程', choices=choices, images=("python.png","scratch.png"), default_choice='Scratch', cancel_choice='Python')
print(a)
此时因为其返回值是点击的图片的文件名或者按钮上的文字,所以并不需要将图片名称包含在choices中,无论是用image参数指定单张图片还是用images指定多张图片。
它的执行效果如下图所示:
可以直接点击此链接直接查看运行。