一个简单的例子

在 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)

# 注意,msgbox的参数是一个字符串

# 如果用户选择Cancel,该函数返回None

g.msgbox("你的选择是: " + str(choice), "结果")

msg = "你希望重新开始小游戏吗?"

title = "请选择"

# 弹出一个Continue/Cancel对话框

if g.ccbox(msg, title):

pass # 如果用户选择Continue

else:

sys.exit(0) # 如果用户选择Cancel

3. EasyGUI 的各种功能演示

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

python easygui.py

或者可以从 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 g

g.msgbox("Hello, world!")

6. EasyGUI 函数的默认参数

对于所有对话框而言,前两个参数都是消息主体和对话框标题。

按照这个规律,在某种情况下,这可能不是理想的布局设计(比如当对话框在获取目录或文件名的时候会选择忽略消息参数),但保持这种一致性且贯穿于所有的窗口部件是更为得体的考虑!

绝大部分的 EasyGUI 函数都有默认参数,几乎所有的组件都会显示消息主体和对话框标题。

标题默认是空字符串,消息主体通常有一个简单的默认值。

这使得你可以尽可能少的去设置参数,比如 msgbox() 函数标题部分的参数是可选的,因此你调用 msgbox() 的时候只需要指定一个消息参数即可,例如:

>>> msgbox('我爱小甲鱼^_^')

当然你也可以指定标题参数和消息参数,例如:

>>> msgbox('我爱小甲鱼^_^', '鱼油心声')

在各类按钮组件里,默认的消息是 “Shall I continue?”,所以你可以不带任何参数地去调用它们。

这里我们演示不带任何参数地去调用 ccbox(),当选择 “cancel” 或关闭窗口的时候返回一个布尔类型的值:

if ccbox():

pass # 用户选择继续

else:

return # 用户选择取消

7. 使用关键字参数调用 EasyGUI 的函数

调用 EasyGUI 函数还可以使用关键字参数哦。

现在假设你需要使用一个按钮组件,但你不想指定标题参数(第二个参数),你仍可以使用关键字参数的方法指定 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)

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=('[]Yes', '[]No'), image=None, default_choice='[]Yes', cancel_choice='[]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() 返回按钮的文本内容。

如果用户点击取消或者关闭窗口,那么会返回默认选项(第一个选项)。

请看例子:

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” 之前的,那么在列表中第一个元素将会被选中。

结合我们之前学习的文件操作,举个高达上的例子(源代码在第35讲的课后作业中^_^):

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 值。

实现如下图(源代码在第35讲的课后作业中^_^):

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 = 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")

16. 捕获异常

exceptionbox()

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

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

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

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

try:

print('I Love FishC.com!')

int('FISHC') # 这里会产生异常

except:

exceptionbox()

转载:小甲鱼

python中easygui有几种_python easygui用法相关推荐

  1. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  2. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

  3. python中的方法需要定义_Python中规范定义命名空间的一些建议

    API的设计是一个艺术活.往往需要其简单.易懂.整洁.不累赘. 很多时候,我们在底层封装一个方法给高层用,而其它的方法只是为了辅助这个方法的. 也就是说我们只需要暴露这个方法就行,不用关心这个方法是怎 ...

  4. python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...

  5. python中赋值不正确的_python中的“赋值与深浅拷贝”

    Python中,赋值与拷贝(深/浅拷贝)之间是有差异的,这主要源于数据在内存中的存放问题,本文将对此加以探讨. 1 赋值(添加名字) 赋值不会改变内存中数据存放状态,比如在内存中存在一个名为data的 ...

  6. python中关键字 表示空类型_Python小知识:如何在Python 3中转换数据类型

    写在前面: 在Python中,数据类型用于对一种特定类型的数据进行分类,确定可以分配给该类型的值以及可以对其执行的操作. 这里主要讲述转换数字,字符串,元组和列表,并提供示例以帮助各位熟悉不同的用例. ...

  7. python中字符串的几种表达方式(用什么方式表示字符串)

    今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. python的几种表达方式 1 使用单引号扩起来字符串 > ...

  8. python中matrix是什么意思_Python的基础语法

    Python的基础语法 在对Python有了基础的认识之后,下面来了解一下Python的基础语法,看看它和C语言.java之间的基础语法差异. 一.变量.表达式和语句 Python中的语句也称作命令, ...

  9. python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

最新文章

  1. c c++常用算法手册(第3版_嵌入式软件开发必看书籍推荐(C/C++/linux/软件)
  2. HTML转义字符大全
  3. python条件语句-Python 条件语句
  4. background-attachment:fixed应用
  5. linux下文件的创建时间、访问时间、修改时间和改变时间
  6. 前端学习(2893):导航组件的编写和属性技巧设置
  7. ultraos win10启动盘_UltraISO制作U盘启动安装MSDN原版Win10系统教程 - SDN系统库
  8. jq动态渲染后获取不到元素高度_浏览器的渲染机制
  9. 学好Windows编程要看的书籍
  10. Spring Security 基于数据库的认证
  11. 计算机审计 报告哦,计算机审计实训报告
  12. 简述Flash 事件机制?
  13. CADisplaylink初解
  14. android ndk makefile,用Android NDK打造自己的toolchain(使用C/C++默认的Makefile)
  15. 计算机创新设计2大赛获奖作品3Done,走向3D创意世界——3Done创客设计比赛
  16. 基于SSH框架的管理系统【完整项目源码】
  17. 为何软件需要数字签名
  18. Android Data Binding 初识
  19. Python中sys模块使用
  20. 计算机科学基础word实验一,计算机基础实验报告

热门文章

  1. 网络安全-IPSec(互联网安全协议)
  2. mysql date trunc用法_Oracle数据库-trunc函数的用法
  3. 这几种方法教你快速分辨油烟净化器质量好坏
  4. 翻译Deep Learning and the Game of Go(8)第六章:给围棋数据设计神经网络(上)
  5. JS 页面内锚点跳转
  6. 仿应学短视频APP项目功能分析说明书
  7. 百度网盘安装,双击一闪而过没有反应
  8. Python django宠物商城
  9. 达人评测电视a53和a73区别
  10. 2022年9月8日百度网盘全自动扩容软件技术功能分析