[扩展阅读] EasyGUI 学习文档【超详细中文版】
[扩展阅读] EasyGUI 学习文档【超详细中文版】
0. 安装 EasyGUI
官网:https://github.com/robertlugg/easygui
python查看内置的所有模块
help('modules')
使用 pip 进行安装:(windows使用pip安装,进入到自己python的安装目录)
1. 什么是 EasyGUI?
EasyGUI 是 Python 中一个非常简单的 GUI 编程模块,不同于其他的 GUI 生成器,它不是事件驱动的。相反,所有的 GUI 交互都是通过简地函数调用就可以实现。
EasyGUI 为用户提供了简单的 GUI 交互接口,不需要程序员知道任何有关 tkinter,框架,部件,回调或 lambda 的任何细节。
EasyGUI 可以很好地兼容 Python 2 和 3,并且不存在任何依赖关系。
EasyGUI 是运行在 Tkinter 上并拥有自身的事件循环,而 IDLE 也是 Tkinter 写的一个应用程序并也拥有自身的事件循环。因此当两者同时运行的时候,有可能会发生冲突,且带来不可预测的结果。因此如果你发现你的 EasyGUI 程序有这样的问题,请尝试在 IDLE 外去运行你的程序。
2. 一个简单的例子
在 EasyGui 中,所有的 GUI 互动均是通过简单的函数调用,下边一个简单的例子告诉你 EasyGui 确实很 Easy!
import easygui as g
import syswhile 1:g.msgbox("嗨,欢迎进入第一个界面小游戏^_^")msg ="请问你希望在鱼C工作室学习到什么知识呢?"title = "小游戏互动"choices = ["谈恋爱", "编程", "OOXX", "琴棋书画"]choice = g.choicebox(msg, title, choices)# 注意,msgbox的参数是一个字符串# 如果用户选择Cancel,该函数返回Noneg.msgbox("你的选择是: " + str(choice), "结果")msg = "你希望重新开始小游戏吗?"title = "请选择"# 弹出一个Continue/Cancel对话框if g.ccbox(msg, title):pass # 如果用户选择Continueelse:sys.exit(0) # 如果用户选择Cancel
3. EasyGUI 的各种功能演示
或者可以从 IDE(例如 IDLE, PythonWin, Wing, 等等)上调用:
import easygui
easygui.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 gg.msgbox("Hello, world!")
6. EasyGUI 函数的默认参数
对于所有对话框而言,前两个参数都是消息主体和对话框标题。
按照这个规律,在某种情况下,这可能不是理想的布局设计(比如当对话框在获取目录或文件名的时候会选择忽略消息参数),但保持这种一致性且贯穿于所有的窗口部件是更为得体的考虑!
绝大部分的 EasyGUI 函数都有默认参数,几乎所有的组件都会显示消息主体和对话框标题。
标题默认是空字符串,消息主体通常有一个简单的默认值。
这使得你可以尽可能少的去设置参数,比如 msgbox() 函数标题部分的参数是可选的,因此你调用 msgbox() 的时候只需要指定一个消息参数即可,例如:
g.msgbox('我爱小甲鱼^_^')
当然你也可以指定标题参数和消息参数,例如:
g.msgbox('我爱小甲鱼^_^', '鱼油心声')
在各类按钮组件里,默认的消息是 “Shall I continue?”,所以你可以不带任何参数地去调用它们。
这里我们演示不带任何参数地去调用 ccbox(),当选择 “cancel” 或关闭窗口的时候返回一个布尔类型的值:
if ccbox():pass # 用户选择继续
else:return # 用户选择取消
7. 使用关键字参数调用 EasyGUI 的函数
调用 EasyGUI 函数还可以使用关键字参数哦。
现在假设你需要使用一个按钮组件,但你不想指定标题参数(第二个参数),你仍可以使用关键字参数的方法指定 choices 参数(第三个参数),像这样:
choices = ['愿意', '不愿意', '有钱的时候就愿意']
reply = g.choicebox('你愿意购买资源打包支持小甲鱼吗?', choices = choices)
8. 使用按钮组件
根据需求,EasyGUI 在 buttonbox() 上建立了一系列的函数供调用。
8.1 msgbox()
msgbox(msg='(Your message goes here)', title=' ', ok_button='OK', image=None, root=None)
8.2 ccbox()
ccbox(msg='Shall I continue?', title=' ', choices=('C[o]ntinue', 'C[a]ncel'), image=None, default_choice='C[o]ntinue', cancel_choice='C[a]ncel')
ccbox() 提供一个选择:“C[o]ntinue” 或者 “C[a]ncel”,并相应的返回 True 或者 False。
注意:“C[o]ntinue” 中的 [o] 表示快捷键,也就是说当用户在键盘上敲一下 o 字符,就相当于点击了 “C[o]ntinue” 按键。
8.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” 的快捷键使用。
8.4 buttonbox()
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() 返回按钮的文本内容。
如果用户点击取消或者关闭窗口,那么会返回默认选项(第一个选项)。
请看例子:
g.buttonbox(msg='你喜欢哪种水果', title=' ', choices=('香蕉', '苹果', '葡萄'), )
8.5 indexbox()
indexbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None, default_choice='Yes', cancel_choice='No')
基本跟 buttonbox() 一样,区别就是当用户选择第一个按钮的时候返回序号 0, 选择第二个按钮的时候返回序号 1。
8.6 boolbox()
boolbox(msg='Shall I continue?', title=' ', choices=('[Y]es', '[N]o'), image=None, default_choice='Yes', cancel_choice='No')
如果第一个按钮被选中则返回 True,否则返回 False。
9. 如何在 buttonbox 里边显示图片
当你调用一个 buttonbox 函数(例如 msgbox(), ynbox(), indexbox() 等等)的时候,你还可以为关键字参数 image 赋值,可以设置一个 .gif 格式的图像(PNG 格式的图像也是支持的哦_):
buttonbox('大家说我长得帅吗?', image='turtle.gif', choices=('帅', '不帅', '!@#$%'))
10. 为用户提供一系列选项
10.1 choicebox()
choicebox(msg='Pick an item', title='', choices=[], preselect=0, callback=None, run=True)
按钮组件方便提供用户一个简单的按钮选项,但如果有很多选项,或者选项的内容特别长的话,更好的策略是为它们提供一个可选择的列表。
choicebox() 为用户提供了一个可选择的列表,使用序列(元祖或列表)作为选项,这些选项会按照字母进行排序。
另外还可以使用键盘来选择其中一个选项(比较纠结,但一点儿都不重要):
例如当按下键盘上的 “g” 键,将会选中的第一个以 “g” 开头的选项。再次按下 “g” 键,则会选中下一个以 “g” 开头的选项。在选中最后一个以 “g” 开头的选项的时候,再次按下 “g” 键将重新回到在列表的开头的第一个以 “g” 开头的选项。
如果选项中没有以 “g” 开头的,则会选中字符排序在 “g” 之前(“f”)的那个字符开头的选项
如果选项中没有字符的排序在 “g” 之前的,那么在列表中第一个元素将会被选中。
10.2 multchoicebox()
multchoicebox(msg='Pick an item', title='', choices=[], preselect=0, callback=None, run=True)
multchoicebox() 函数也是提供一个可选择的列表,与 choicebox() 不同的是,multchoicebox() 支持用户选择 0 个,1 个或者同时选择多个选项。
multchoicebox() 函数也是使用序列(元祖或列表)作为选项,这些选项显示前会按照不区分大小写的方法排好序。
11. 让用户输入消息
11.1 enterbox()
enterbox(msg='Enter something.', title=' ', default='', strip=True, image=None, root=None)
enterbox() 为用户提供一个最简单的输入框,返回值为用户输入的字符串。
默认返回的值会自动去除首尾的空格,如果需要保留首尾空格的话请设置参数 strip=False。
11.2 integerbox()
integerbox(msg='', title=' ', default=None, lowerbound=0, upperbound=99, image=None, root=None)
integerbox() 为用户提供一个简单的输入框,用户只能输入范围内(lowerbound 参数设置最小值,upperbound 参数设置最大值)的整型数值,否则会要求用户重新输入。
11.3 multenterbox()
multenterbox(msg='Fill in values for the fields.', title=' ', fields=[], values=[], callback=None, run=True)
multenterbox() 为用户提供多个简单的输入框,要注意以下几点:
如果用户输入的值比选项少的话,则返回列表中的值用空字符串填充用户为输入的选项。
如果用户输入的值比选项多的话,则返回的列表中的值将截断为选项的数量。
如果用户取消操作,则返回域中的列表的值或者 None 值。
12. 让用户输入密码
有时候可能需要让用户输入密码等敏感信息,那么界面看上去应该是这样的:*******。
12.1 passwordbox()
passwordbox(msg='Enter your password.', title=' ', default='', image=None, root=None)
passwordbox() 跟 enterbox() 样式一样,不同的是用户输入的内容用星号(*)显示出来,该函数返回用户输入的字符串:
12.2 multpasswordbox()
multpasswordbox(msg=‘Fill in values for the fields.’, title=’ ', fields=(), values=(), callback=None, run=True)
multpasswordbox() 跟 multenterbox() 使用相同的接口,但当它显示的时候,最后一个输入框显示为密码的形式(*):
13. 显示文本
EasyGUI 还提供函数用于显示文本。
13.1 textbox()
textbox(msg='', title=' ', text='', codebox=False, callback=None, run=True)
textbox() 函数默认会以比例字体(参数 codebox=True 设置为等宽字体)来显示文本内容(自动换行),这个函数适合用于显示一般的书面文字。
注:text 参数设置可编辑文本区域的内容,可以是字符串、列表或者元祖类型。
13.2 codebox()
codebox(msg='', title=' ', text='')
codebox() 以等宽字体显示文本内容(不自动换行),相当于 textbox(codebox=True)
注:等宽字体很丑的,但适合代码编写,不信你试试看
14. 目录与文件
GUI 编程中一个常见的场景是要求用户输入目录及文件名,EasyGUI 提供了一些基本函数让用户来浏览文件系统,选择一个目录或文件。
14.1 diropenbox()
diropenbox(msg=None, title=None, default=None)
diropenbox() 函数用于提供一个对话框,返回用户选择的目录名(带完整路径哦),如果用户选择 “Cancel” 则返回 None。
default 参数用于设置默认的打开目录(请确保设置的目录已存在)。
14.2 fileopenbox()
fileopenbox(msg=None, title=None, default='*', filetypes=None, multiple=False)
fileopenbox() 函数用于提供一个对话框,返回用户选择的文件名(带完整路径哦),如果用户选择 “Cancel” 则返回 None。
关于 default 参数的设置方法:
default 参数指定一个默认路径,通常包含一个或多个通配符。
如果设置了 default 参数,fileopenbox() 显示默认的文件路径和格式。
default 默认的参数是 ‘*’,即匹配所有格式的文件。
例如:
default="c:/fishc/*.py" 即显示 C:\fishc 文件夹下所有的 Python 文件。
default="c:/fishc/test*.py" 即显示 C:\fishc 文件夹下所有的名字以 test 开头的 Python 文件。
关于 filetypes 参数的设置方法:
可以是包含文件掩码的字符串列表,例如:filetypes = [".txt"]
可以是字符串列表,列表的最后一项字符串是文件类型的描述,例如:filetypes = [".css", [".htm", ".html", “HTML files”]]
最后是 multiple 参数,如果为 True 则表示可以同时选择多个文件。
14.3 filesavebox()
filesavebox(msg=None, title=None, default='', filetypes=None)
filesavebox() 函数提供一个对话框,让用于选择文件需要保存的路径(带完整路径哦),如果用户选择 “Cancel” 则返回 None。
default 参数应该包含一个文件名(例如当前需要保存的文件名),当然也可以设置为空的,或者包含一个文件格式掩码的通配符。
filetypes 参数的设置方法请参考 fileopenbox() 函数。
15. 记住用户的设置
15.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 = filenameself.restore()#**创建“Settings”的实例化对象“settings”**
settingsFilename = "settings.txt"
settings = Settings(settingsFilename)author = "小甲鱼"
book = "《零基础入门学习Pyhon》" # 将上面两个变量的值保存到“settings”对象中
settings.author = author
settings.book = book
settings.store()
print("\n保存完毕\n")
16. 捕获异常
exceptionbox()
使用 EasyGUI 编写 GUI 程序,有时候难免会产生异常。当然这取决于你如何运行你的应用程序,当你的应用程序崩溃的时候,堆栈追踪可能会被抛出,或者被写入到 stdout 标准输出函数中。
EasyGUI 通过 exceptionbox() 函数提供了更好的方式去处理异常。
当异常出现的时候,exceptionbox() 会将堆栈追踪显示在一个 codebox() 中,并且允许你做进一步的处理。
exceptionbox() 很容易使用,下面举个例子:
try:print('I Love FishC.com!')int('FISHC') # 这里会产生异常
except:exceptionbox()
帖子参考:[扩展阅读] EasyGUI 学习文档【超详细中文版】
[扩展阅读] EasyGUI 学习文档【超详细中文版】相关推荐
- 【Python扩展阅读EasyGui 学习文档【超详细中文版】】
转载来源:http://www.itnose.net/detail/6107761.html 0. 安装 EasyGui 官网:http://easygui.sourceforge.net 最新版: ...
- web项目使用OpenOffice实现前端在线预览office文档(超详细)
超详细的OpenOffice实现前端在线预览office文档记录 最近搞一个数字化共享平台,是一个java web项目,使用框架ssm,其中项目有一个需要在线预览PDF.excle.ppt.word文 ...
- RabbitMQ学习文档(详细)
RabbitMQ 1. MQ MQ全称为Message Queue,即消息队列."消息队列"是在消息的传输过程中保存消息的容器.它是典型的:生产者.消费者模型.生产者不断向消息队列 ...
- Hbase学习文档(超详细单机安装)
Hbase学习文档(超详细单机安装) 一.前言 1.1简述 本文分为五个部分:linux主机名的设置.jdk的安装.hadoop的安装.单机模式下hbase的安装.hbase的shell常用命令及ja ...
- 手把手教最新最全最详细Git使用教程(图文并茂,附Git命令大全学习文档)
导读 因为教程详细,所以行文有些长,新手边看边操作效果出乎你的预料.GitHub虽然有些许改版,但并无大碍. 最全Git命令学习文档下载(集合整理,非常适合新手) 一.Git是什么? Git是目前世界 ...
- 安卓学习文档收集汇总
安卓学习文档收集汇总 https://www.jianshu.com/p/86aed183ce6c?utm_campaign=maleskine&utm_content=note&ut ...
- HTML学习知识点大全-----超详细(各种标签使用讲解及案例)
HTML学习知识点大全-----超详细(各种标签使用讲解及案例) 1:概念 **最基础的网页开发语言 *Hyper Text Markup language:超文本标记语言超文本:运用了超链接的方法, ...
- linux个人学习文档
Linux系统基础 第1章 Linux简介 1.1开源的力量 1.1.1 我们已经用过的开源软件 1.1.2 开源软件领域的旗帜:Linux 1.1.3 软件开源的好处 1.2 Linux的来历 1. ...
- kotlin入门学习文档
kotlin入门学习文档 前言:本文会着重对比java和kotlin,方便Java选手理解 提前总结:kotlin在服务端应用本质上是基于Java进行的改进,底层都是由JVM翻译成底层语言,我们只需要 ...
最新文章
- Java手机游戏新流星蝴蝶剑,手机游戏平台java游戏经典的五款游戏回顾-经典游戏...
- 二分法的应用:POJ1064 Cable master
- jsp中post提交和get提交乱码解决_统一请求编码
- 【英语学习】【WOTD】cerebral 释义/词源/示例
- 实现三栏布局的几种方法
- 十行代码--用python写一个USB病毒 (知乎 DeepWeaver)
- zoj 3599 Game 博弈论
- linux 内网文件传输工具_局域网内文件传输工具 | nitroshare
- Java基础:第5-6章(重点)
- ssh无密码登录原理和配置方法
- 搜狗细胞词库解析(仅提取词和词频)
- 【Excel】Excel无序数据模糊查询
- 页面布局高度塌陷问题和解决方案
- spark-streaming从入门到精通
- 【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构
- Java端生成二维码
- 微信小程序 table表格 固定表头和首列 右侧表格可以左右滚动(多种表格演练)
- 基于MATLAB的GMSK调制解调系统的设计仿真
- 磁盘阵列怎么组linux系统,Linux系统下如何设置磁盘阵列?
- 基于Java的部门管理系统
热门文章
- 传奇GOM/GEE微端配置外网架设教程
- 实现一个方法,给定一个输入字符串,能够删除所有连续同样字母(大小写不敏感)。例如,输入为ABBCCCCCBBAB,输出就是 ABCBAB
- win10触控平板 如何禁掉IE10的手势控制
- 《中国图书馆图书分类法》(第五版)详表(中图分类号查询表)
- SRS4.0源码分析-state-thread
- 手写 React 第 2 节 - 初探 React 实现机制
- HP打印机M329dw纸盘关闭卡、涩问题解决
- 用python实现成绩录入
- 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板
- 年薪百万的阿里 P7 到底该具备什么样的能力?!解密篇