首页 > 其他学习 > python > python图形界面入门模块easygui
2018
11-15

python图形界面入门模块easygui

EasyGUI是一个用于在Python中进行非常简单的GUI编程的模块,提供易于使用的界面用于与用户进行简单的GUI交互,EasyGUI在Python 2和3上运行,没有任何依赖关系。

EasyGUI与其他GUI生成器的不同之处在于EasyGUI不是事件驱动的。相反,所有GUI交互都是通过简单的函数调用来调用的。

EasyGUI官网:http://easygui.sourceforge.net

下载最新EasyGUI压缩包解压获得easygui.py文件,把该文件复制到python的安装目录中的Lib目录中即可完成安装EasyGui,可在程序中直接引用

1. 建议不要在 IDLE 上运行 EasyGui

EasyGui是运行在Tkinter上并拥有自身的事件循环,而IDLE也是Tkinter写的一个应用程序并也拥有自身的事件循环。因此当两者同时运行的时候,有可能会发生冲突,且带来不可预测的结果。因此如果你发现你的 EasyGui 程序有这样的问题,请尝试在 IDLE 外去运行你的程序。

2.为了使用 EasyGui模块,要先导入它

最简单的导入语句是:import easygui,如果你使用上面这种形式导入的话,那么你使用EasyGui的函数的时候,必须在函数的前面加上前缀easygui,像这样:easygui.msgbox(...)

另一种选择是导入整个EasyGui包:from easygui import *,这使得我们更容易调用 EasyGui 的函数,你可以直接这样编写代码msgbox(...),但是有可能会覆盖原有的内置函数

第三种方案:import easygui as g,这样可以保持EasyGui的命名空间,同时减少打字数量。可以这么调用EasyGui的函数:g.msgbox(...)

3. EasyGui函数的参数

对于所有EasyGui函数而言,前两个参数分别是消息(msg)和标题(title)。

绝大部分的EasyGui函数都有默认参数,几乎所有的组件都会显示一个消息和标题。标题默认是空字符串,信息通常有一个简单的默认值,如msgbox()函数默认信息是"Your message goes here",ccbox()函数的默认信息是"Shall I continue?"

调用EasyGui函数可以使用关键字参数。

4. 使用按钮组件

4.1 msgbox()

msgbox(msg='(Your message goes here)', title=' ', ok_button='OK', image=None, root=None)

msgbox()显示一个消息和提供一个按钮,可以指定任意的消息和标题,也重写"OK"按钮的内容。

4.2 ccbox()

ccbox(msg='Shall I continue?', title=' ', choices=('Continue', 'Cancel'), image=None)

ccbox()提供一个选择:Continue 或者 Cancel,并相应的返回True(选中Continue)或者False(选中Cancel)。

使用实例:if ccbox('要再来一次吗?', choices=('要啊', '算了吧'))

4.3 ynbox()和boolbox()

ynbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None)

boolbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None)

他们的功能和ccbox()完全一样,仅仅是choices的默认值不一样,这两个函数不管是功能还是默认值都完全相同,

4.4 buttonbox()

buttonbox(msg='', title=' ', choices=('Button1', 'Button2', 'Button3'), image=None, root=None)

buttonbox()定义一组自定义的按钮

当用户点击一个按钮的时候,返回该按钮的文本内容。如果用户取消或者关闭窗口,那么会返回None。

4.5 indexbox()

indexbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None)

功能上跟buttonbox()一样,区别就是当用户选择时返回所选择项在choices列表中的索引值而不是返回文本

在按钮组件里显示图片

当调用一个buttonbox函数的时候,还可以为关键字参数image赋值,这是设置一个.gif格式的图像(注意仅支持 GIF 格式哦):

5. 为用户提供一系列选项

5.1 choicebox()

choicebox(msg='Pick something.', title=' ', choices=())

按钮组件方便提供用户一个简单的按钮选项,但如果有很多选项,或者选项的内容特别长的话,更好的策略是为它们提供一个可选择的列表。

choicebox() 为用户提供了一个可选择的列表,使用序列(元祖或列表)作为选项,这些选项显示前会按照不区分大小写的方法排好序。

另外还可以使用键盘来选择其中一个选项(比较纠结,但一点儿都不重要):

例如当按下键盘上的"g"键,将会选中的第一个以"g"开头的选项。再次按下"g"键,则会选中下一个以"g"开头的选项。在选中最后一个以"g"开头的选项的时候,再次按下"g"键将重新回到在列表的开头的第一个以"g"开头的选项。

如果选项中没有以"g"开头的,则会选中字符排序在"g"之前("f")的那个字符开头的选项

如果选项中没有字符的排序在"g"之前的,那么在列表中第一个元素将会被选中。

5.2 multchoicebox()

multchoicebox(msg='Pick as many items as you like.', title=' ', choices=(), **kwargs)

multchoicebox() 函数也是提供一个可选择的列表,与 choicebox() 不同的是,multchoicebox() 支持用户选择0个,1个或者同时选择多个选项。

返回选择的文本组成的列表,一个都不选返回一个空列表

6. 让用户输入消息

6.1 enterbox()

enterbox(msg='Enter something.', title=' ', default='', strip=True, image=None, root=None)

enterbox()为用户提供一个最简单的输入框,返回值为用户输入的字符串。默认返回的值会自动去除首尾的空格,如果需要保留首尾空格的话请设置参数strip=False。

6.2 passwordbox()

passwordbox(msg='Enter your password.', title=' ', default='', image=None, root=None)

passwordbox()跟enterbox()样式一样,不同的是用户输入的内容用"*"显示出来,返回用户输入的字符串

6.3 integerbox()

integerbox(msg='', title=' ', default='', lowerbound=0, upperbound=99, image=None, root=None, **invalidKeywordArguments)

integerbox()为用户提供一个简单的输入框,用户只能输入范围内(lowerbound参数设置最小值,upperbound参数设置最大值)的整型数值,否则会要求用户重新输入。

6.4 multenterbox()

multenterbox(msg='Fill in values for the fields.', title=' ', fields=([list]), values=())

multenterbox()为用户提供多个简单的输入框,返回用户填写的字符串,没有填的选项返回空字符串

list1= ['父亲:','母亲:','妻子']

g.multenterbox(msg='请输入您的家庭信息',title='信息登记',fields=(list1))

6.5 multpasswordbox()

multpasswordbox(msg='Fill in values for the fields.', title=' ', fields=([list]), values=())

multpasswordbox() 跟 multenterbox() 使用相同的接口,但当它显示的时候,最后一个输入项会被认为是密码项,输入会显示为星号(*)

list1= ['用户名:','密码:']

g.multpasswordbox(msg='请输入用户名和密码',title='登录',fields=(list1))

7.显示文本

EasyGui 还提供函数用于显示文本。

7.1 textbox()

textbox(msg='', title=' ', text='', codebox=0)

7.textbox(text= '要显示的内容(可以是字符串类型,列表类型,或者元祖类型)')

testbox() 函数默认会以比例字体(参数 codebox=1 设置为等宽字体)来显示文本内容(会自动换行哦),这个函数适合用于显示一般的书面文字。

7.2 codebox()

codebox(msg='', title=' ', text='')

codebox() 以等宽字体显示文本内容,相当于textbox(codebox=1)

注:等宽字体很丑的,不信试试看

8.目录与文件

GUI 编程中一个常见的场景是要求用户输入目录及文件名,EasyGui 提供了一些基本函数让用户来浏览文件系统,选择一个目录或文件。

8.1 diropenbox()

diropenbox(msg=None, title=None, default=None)

diropenbox() 函数用于提供一个对话框,返回用户选择的目录名(带完整路径),如果用户选择"Cancel(取消)"则返回 None。

default参数用于设置默认的打开目录(请确保设置的目录已存在)。

8.2 fileopenbox()

fileopenbox(msg=None, title=None, default='*', filetypes=None)

fileopenbox() 函数用于提供一个对话框,返回用户选择的文件名(带完整路径),如果用户选择"Cancel(取消)"则返回 None。

default指定一个默认路径,通常包含一个或多个通配符,如果设置了default,显示默认的文件路径和格式,默认值是'*',即匹配所有格式的文件。

如:default="c:/python/test*.py" 显示C:\python文件夹下所有的名字以test开头的后缀为py的文件。

filetypes参数是包含文件后缀的字符串列表,例如:filetypes = ["*.txt","*.css","*php"]

现实中有些类型的文件后缀名有多种,可以使用filetypes = ["*.css", ["*.htm", "*.html", "HTML files"]],["*.htm", "*.html", "HTML files"]这个列表的最后一项字符串是文件类型的描述

8.3 filesavebox()

filesavebox(msg=None, title=None, default='', filetypes=None)

filesavebox()函数提供一个对话框,让用于选择文件需要保存的路径(带完整路径哦),如果用户选择"Cancel(取消)"则返回 None。

default 参数应该包含一个文件名(例如当前需要保存的文件名),当然你也可以设置为空的,或者包含一个文件格式掩码的通配符。

filetypes 参数的设置方法请参考fileopenbox()方法。

9. 记住用户的设置EgStore

GUI编程中一个常见的场景就是要求用户设置一下参数,然后保存下来,以便下次用户使用你的程序的时候可以记住他的设置。

为了实现对用户的设置进行存储和恢复这一过程,EasyGui提供了一个叫做EgStore的类。

为了记住某些设置,应用程序首先必须定义一个继承自EgStore的类,设置类的构造函数(__init__方法)必须初始化所有想要记住的那些值,然后必须创建一个该类的对象。

一旦你这样做了,你就可以在"设置"对象中通过设定值去实例化变量,从而很简单地记住设置。之后使用 settings.store() 方法在硬盘上持久化设置对象。

下面是创建一个"设置"类的例子:

#-----------------------------------------------------------------------

# create "settings", a persistent Settings object

# Note that the "filename" argument is required.

# The directory for the persistent file must already exist.

#-----------------------------------------------------------------------

settingsFilename = os.path.join("C:", "FishCApp", "settings.txt") # Windows example

settings = Settings(settingsFilename)

下面是使用"设置"对象的例子:

# we initialize the "user" and "server" variables

# In a real application, we'd probably have the user enter them via enterbox

user = "奥巴马"

server = "白宫"

# we save the variables as attributes of the "settings" object

settings.userId = user

settings.targetServer = server

settings.store() # persist the settings

# run code that gets a new value for userId

# then persist the settings with the new value

user = "小甲鱼"

settings.userId = user

settings.store()

10. 捕获异常

EasyGui通过exceptionbox()函数提供了更好的方式去处理异常,异常出现的时候,exceptionbox() 会显示堆栈追踪在一个 codebox() 中并且允许你做进一步的处理。

exceptionbox() 很容易使用,下面是一个例子:

try:
        print('I Love FishC.com!')
        int('FISHC') # 这里会产生异常
except:
        g.exceptionbox()
最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。