python-图形用户界面:EasyGui

1. 图形用户界面:EasyGui

  • EasyGui官网
  • 查缺补漏
  • 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面

1.1 简介

  • EasyGUI 是 Python 中一个非常简单的 GUI 编程模块,不同于其他的 GUI 生成器,它不是事件驱动的。相反,所有的 GUI 交互都是通过简单的函数调用就可以实现。
  • EasyGUI 为用户提供了简单的 GUI 交互接口,不需要程序员知道任何有关 tkinter,框架,部件,回调或 lambda 的任何细节。
  • EasyGUI 可以很好地兼容 Python 2 和 3,并且不存在任何依赖关系。
  • EasyGUI 是运行在 Tkinter 上并拥有自身的事件循环,而 IDLE 也是 Tkinter 写的一个应用程序并也拥有自身的事件循环。因此当两者同时运行的时候,有可能会发生冲突,且带来不可预测的结果。因此如果你发现你的 EasyGUI 程序有这样的问题,请尝试在 IDLE 外去运行你的程序。把*.py的文件默认打开方式换一下(在属性里)

1.3 easyGui的安装

1.3.1 用pip命令安装
1.3.2 常规安装推荐

1.4 测试安装与基本设置

  1. 在IDLE里引入easyGui
  2. 输出出现弹框就成功了
    在这里插入图片描述
更改easyGui对话框的默认大小
  1. 打开easygui.py
  2. 查找__choicebox
  3. 按照下图替换数据
  4. 重启工具


在这里插入图片描述

改后的

2.EasyGUI 的各种功能演示

2.1 运行 EasyGUI 的演示程序(API文档)

2.1.1 要运行 EasyGUI 的演示程序,在命令行调用 EasyGUI 是这样的:

python easygui.py

2.1.2 或者可以从 IDE(例如 IDLE, PythonWin, Wing, 等等)上调用:

>>> import easygui
>>> easygui.egdemo()

成功调用后将可以尝试 EasyGUI 拥有的各种功能,并将结果打印至控制台。
在这里插入图片描述

2.2 导入 EasyGUI

  • 三种导入方式

2.2.1import easygui as g 推荐

>>> import easygui as g
>>> g.msgbox ('hello word')

2.2.2 import easygui 在使用 EasyGUI 的函数的时候,必须在函数的前面加上前缀 easygui,像这样:

>>> import easygui
>>> easygui.msgbox('hello word')

2.2.3 from easygui import * 导入整个 EasyGUI 包:注意:同名函数会被重写覆盖

>>> from  easygui import *
>>> msgbox('hello word')

2.3 使用 EasyGUI

  • 一旦你的模块导入 EasyGUI,GUI 操作就是一个简单的调用 EasyGUI 函数的几个参数的问题了。

2.3.1 输出’hello word‘
在这里插入图片描述

2.4 EasyGUI 函数的默认参数和使用关键字参数

  • 对于所有对话框而言,前两个参数都是消息主体和对话框标题。
  • 绝大部分的 EasyGUI 函数都有默认参数,几乎所有的组件都会显示消息主体和对话框标题
  • 标题默认是空字符串,消息主体通常有一个简单的默认值。
  • 在各类按钮组件里,默认的消息是 “Shall I continue?”,所以你可以不带任何参数地去调用它们。

3,使用按钮组件

  • 根据需求,EasyGUI 在 buttonbox() 上建立了一系列的函数供调用。

3.1 msgbox() 实例

  • msgbox(msg='(Your message goes here)', title=' ', ok_button='OK', image=None, root=None)
  • msgbox() 显示一个消息和提供一个"OK"按钮,你可以指定任意的消息和标题,你甚至可以重写"OK"按钮的内容

① 一个参数(消息主体)
在这里插入图片描述

② 两个参数(消息主体,消息标题)

在这里插入图片描述

3.2 ccbox()实例choices两个值

  • ccbox(msg='Shall I continue?', title=' ', choices=('Continue', 'Cancel'), image=None)
  • ccbox() 提供一个选择:Continue 或者 Cancel,并相应的返回 1(选中Continue)或者 0(选中Cancel)。注意 ccbox() 是返回整型的 1 或 0,不是布尔类型的 True 或 False。且只传两个值

在这里插入图片描述

3.3 ynbox()

  • ynbox(msg='Shall I continue?', title=' ', choices=('[<F1>]Yes', '[<F2>]No'), image=None, default_choice='[<F1>]Yes', cancel_choice='[<F2>]No')
  • 跟 ccbox() 一样,只不过这里默认的 choices 参数值不同而已,[] 表示将键盘上的 F1 功能按键作为 “Yes” 的快捷键使用。

3.4 buttonbox()choices多个值

  • buttonbox(msg='', title=' ', choices=('Button[1]', 'Button[2]', 'Button[3]'), image=None, images=None, default_choice=None, cancel_choice=None, callback=None, run=True)
  • 可以使用 buttonbox() 定义自己的一组按钮,buttonbox() 会显示一组由你自定义的按钮。
  • 当用户点击任意一个按钮的时候,buttonbox() 返回按钮的文本内容
  • 如果用户点击取消或者关闭窗口,那么会返回默认选项(第一个选项)。
    在这里插入图片描述

3.5 indexbox() choices多个值

  • indexbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None, default_choice='Yes', cancel_choice='No')
  • 与buttonbox()用法一样,就是返回值:字符串换成index序列
  • index从0开始

3.6 boolbox() 返回布尔值

  • boolbox(msg='Shall I continue?', title=' ', choices=('[Y]es', '[N]o'), image=None, default_choice='Yes', cancel_choice='No')
  • 如果第一个按钮被选中则返回 True,否则返回 False。

4. 如何在 buttonbox 里边显示图片

  • 当你调用一个 buttonbox 函数(例如 msgbox(), ynbox(), indexbox() 等等)的时候,你还可以为关键字参数 image 赋值,可以设置一个 .gif格式的图像(PNG格式的图像也是支持的哦):

4.1

5. 为用户提供一系列选项(下拉式列表)

5.1 choicebox()-选择一个

  • choicebox(msg='Pick an item', title='', choices=[], preselect=0, callback=None, run=True)
  • choicebox() 为用户提供了一个可选择的列表,使用序列(元祖或列表)作为选项,这些选项会按照字母进行排序
  • 并把选中的以字符串形式返回
  • 另外还可以使用键盘来选择其中一个选项

使用键盘来选择其中一个选项
1.例如当按下键盘上的 “g” 键,将会选中的第一个以 “g” 开头的选项。再次按下 “g” 键,则会选中下一个以 “g” 开头的选项。在选中最后一个以 “g” 开头的选项的时候,再次按下 “g” 键将重新回到在列表的开头的第一个以 “g” 开头的选项。
2.如果选项中没有以 “g” 开头的,则会选中字符排序在 “g” 之前(“f”)的那个字符开头的选项
3.如果选项中没有字符的排序在 “g” 之前的,那么在列表中第一个元素将会被选中。

实例

	choices = ['柯南','小兰','毛利','原子','元太','娜美']
	g.choicebox('哪个不是柯南里的人物','名侦探柯南',choices = choices )

效果:
在这里插入图片描述

5.2 multchoicebox()-选择零个、一个、多个

  • multchoicebox(msg='Pick an item', title='', choices=[], preselect=0, callback=None, run=True)
  • multchoicebox() 函数也是提供一个可选择的列表,与 choicebox() 不同的是,multchoicebox() 支持用户选择 0 个,1 个或者同时选择多个选项。
  • multchoicebox() 函数也是使用序列(元祖或列表)作为选项,这些选项显示前会按照不区分大小写的方法排好序
  • 并把选中的以字符串形式返回

实例

	import easygui 
	choices = ['柯南','小兰','毛利','原子','元太','娜美','自来也','海绵宝宝']
	g.multchoicebox ('哪个不是柯南里的人物','名侦探柯南',choices = choices )
	输出:['娜美', '海绵宝宝', '自来也']

效果:

在这里插入图片描述

6. 让用户输入消息

6.1 enterbox() - 输入str

  • enterbox(msg='Enter something.', title=' ', default='', strip=True, image=None, root=None)
  • enterbox() 为用户提供一个最简单的输入框,返回值为用户输入的字符串。
  • 默认返回的值会自动去除首尾的空格,如果需要保留首尾空格的话请设置参数 strip=False。
	g.enterbox('你的柯南看到多少集了???','名侦探柯南')
	输出:'300,and you???'

效果:
在这里插入图片描述

6.2 integerbox()-输入int

  • integerbox(msg=’’, title=’ ', default=None, lowerbound=0, upperbound=99, image=None, root=None)
  • integerbox() 为用户提供一个简单的输入框,用户只能输入范围内(lowerbound 参数设置最小值,upperbound 参数设置最大值)的整型数值,否则会要求用户重新输入。
g.integerbox('你最喜欢的数字是?','数字调查',lowerbound = 0,upperbound = 10)
输出:2

效果:

在这里插入图片描述

6.3 multenterbox() 多个输入

  • multenterbox(msg='Fill in values for the fields.', title=' ', fields=[], values=[], callback=None, run=True)
  • fields 属性名,values默认属性值
  • multenterbox() 为用户提供多个简单的输入框,要注意以下几点:

1.如果用户输入的值比选项少的话,则返回列表中的值用空字符串填充用户为输入的选项。
2.如果用户输入的值比选项多的话,则返回的列表中的值将截断为选项的数量。
3.如果用户取消操作,则返回域中的列表的值或者 None 值。

实例

	person_fields = ('姓名','年龄','性别','婚姻状况')
	person_values = ('张三','22','男','未婚')
	g.multenterbox(msg='个人信息',title='有缘无份婚介所',fields=person_fields,values= person_values )
	输出:['李四', '80', '男', '未婚']

效果:
在这里插入图片描述

7 让用户输入密码

  • 有时候可能需要让用户输入密码等敏感信息,那么界面看上去应该是这样的:*******。

7.1 passwordbox()

  • passwordbox(msg='Enter your password.', title=' ', default='', image=None, root=None)
  • passwordbox() 跟 enterbox() 样式一样,不同的是用户输入的内容用星号(*)显示出来,该函数返回用户输入的字符串:

实例:

g.passwordbox(msg='请输入您的密码', title=' ', default='', image=None, root=None)
输出:'12334345'

效果:
在这里插入图片描述

7.2 multpasswordbox() 多个输入,最后一个****

  • multpasswordbox(msg='Fill in values for the fields.', title=' ', fields=(), values=(), callback=None, run=True)
  • multpasswordbox() 跟 multenterbox() 使用相同的接口,但当它显示的时候,最后一个输入框显示为密码的形式(*)
    实例:
	person_fields = ('姓名','年龄','性别','婚姻状况')
	person_values = ('张三','22','男','未婚')
	g.multpasswordbox(msg='个人信息', title='有缘无份婚介所', fields=person_fields, values=person_values,)
	输出:['张三', '22', '男', '未婚']

效果:
在这里插入图片描述

8. 显示文本

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

8.1 textbox()

  • textbox(msg='', title=' ', text='', codebox=False, callback=None, run=True)
  • textbox() 函数默认会以比例字体(参数 codebox=True 设置为等宽字体)来显示文本内容(自动换行),这个函数适合用于显示一般的书面文字
  • text 参数设置可编辑文本区域的内容,可以是字符串、列表或者元祖类型。

实例:

	demo_text = '1.如果用户输入的值比选项少的话'
	g.textbox(msg='', title=' ', text=demo_text, codebox=False)
	输出:'1.如果用户输入的值比选项少的话'

效果:
在这里插入图片描述

8.2 codebox()

  • codebox(msg='', title=' ', text='')
  • codebox() 以等宽字体显示文本内容(不自动换行),相当于 textbox(codebox=True)

9. 目录与文件

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

9.1 diropenbox()-返回路径名

  • diropenbox(msg=None, title=None, default=None)
  • diropenbox() 函数用于提供一个对话框,返回用户选择的目录名(带完整路径哦),如果用户选择 “Cancel” 则返回 None。
  • default 参数用于设置默认的打开目录(请确保设置的目录已存在)

实例:

g.diropenbox( title='追踪文件', )
输出:'E:\\Python\\WorkSpace\\Demo'

效果:

在这里插入图片描述

9.2 fileopenbox() 返回文件名

  • fileopenbox(msg=None, title=None, default='*', filetypes=None, multiple=False)
  • fileopenbox() 函数用于提供一个对话框,返回用户选择的文件名(带完整路径哦),如果用户选择 “Cancel” 则返回 None。
  • 关于 default 参数的设置方法:
  1. default 参数指定一个默认路径,通常包含一个或多个通配符。
  2. 如果设置了 default 参数,fileopenbox() 显示默认的文件路径和格式。
  3. default 默认的参数是 '’,即匹配所有格式的文件。
    例如:
    default="c:/fishc/
    .py" 即显示 C:\fishc 文件夹下所有的 Python 文件。
    default=“c:/fishc/test*.py” 即显示 C:\fishc 文件夹下所有的名字以 test 开头的 Python 文件
  • 关于 filetypes 参数的设置方法:
  1. 可以是包含文件掩码的字符串列表,例如:filetypes = ["*.txt"]
  2. 可以是字符串列表,列表的最后一项字符串是文件类型的描述,例如:filetypes = [".css", [".htm", “*.html”, “HTML files”]]
  • 最后是 multiple 参数,如果为 True 则表示可以同时选择多个文件。

实例:

	g.fileopenbox( title='打开文件', default='*')
	输出:'E:\\Python\\WorkSpace\\Demo\\aa.txt'

效果:
在这里插入图片描述

9.3 filesavebox()

  • filesavebox(msg=None, title=None, default='', filetypes=None)
  • filesavebox() 函数提供一个对话框,让用于选择文件需要保存的路径(带完整路径哦),如果用户选择 “Cancel” 则返回 None。
  • default 参数应该包含一个文件名(例如当前需要保存的文件名),当然也可以设置为空的,或者包含一个文件格式掩码的通配符。
  • filetypes 参数的设置方法请参考 fileopenbox() 函数。

实例:

	g.filesavebox(default='20210201.txt')
	输出:'E:\\Python\\WorkSpace\\Demo\\20210201.txt'

效果:
在这里插入图片描述

10 记住用户的设置

10.1 EgStore

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

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

为了记住某些设置,你的应用程序必须定义一个类(下面案例中的 “Settings”)继承自 EgStore 类。

然后你的应用程序必须创建一个该类的实例化对象(下面案例中的 “settings”)。

设置类的构造函数(init 方法)必须初始化所有的你想要它所记住的那些值。

一旦你这样做了,你就可以在 settings 对象中通过设定值去实例化变量,从而很简单地记住设置。

之后使用 settings.store() 方法在硬盘上持久化保存。

下面创建一个叫做 “Settings” 的类:

from easygui import EgStore
 
# 定义一个叫做“Settings”的类,继承自EgStore类
class Settings(EgStore):
 
    def __init__(self, filename):  # 需要指定文件名
        # 指定要记住的属性名称
        self.author = ""
        self.book = ""
 
        # 必须执行下面两个语句
        self.filename = filename
        self.restore()
 
# 创建“Settings”的实例化对象“settings”
settingsFilename = "settings.txt"
settings = Settings(settingsFilename)
 
author = "小甲鱼"
book = "《零基础入门学习Pyhon》"
 
# 将上面两个变量的值保存到“settings”对象中
settings.author = author
settings.book = book
settings.store()
print("\n保存完毕\n")

11 捕获异常

11.1 exceptionbox()

使用 EasyGUI 编写 GUI 程序,有时候难免会产生异常。当然这取决于你如何运行你的应用程序,当你的应用程序崩溃的时候,堆栈追踪可能会被抛出,或者被写入到 stdout 标准输出函数中。

EasyGUI 通过 exceptionbox() 函数提供了更好的方式去处理异常。

当异常出现的时候,exceptionbox() 会将堆栈追踪显示在一个 codebox() 中,并且允许你做进一步的处理。

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

try:
        print('I Love FishC.com!')
        int('FISHC') # 这里会产生异常
except:
        exceptionbox()

效果:
在这里插入图片描述

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值