猫史档案馆


Python【编程小讲堂】第六期 easygui干货

用户:爱因斯坦的弟子爱因斯坦的弟子查看:29 回复:18 评论:29 创建时间:2019-08-14T20:49:42


 

哇!!!爱因斯坦的弟子又来啦

你们不说easygui难懂吗?

部分资料来自网络

https://blog.csdn.net/shirley_sweet/article/details/77651008

https://www.cnblogs.com/bldly1989/p/6651855.html

以及我的笔记

干货干货,实用实用!请收藏!

emotion_编程猫_厉害了

Python 模块EasyGui详细介绍

在Windows想用Python开发一些简单的界面,所以找到了很容易上手的EasyGui库。下面就分享一下简单的使用吧。

接下来,我将从简单,到复杂一点点的演示如何使用这个模块。希望能给刚接触easygui的你一点帮助:

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

1、msgBox

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

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

msgbox() 的实例函数:

 #!/usr/bin/env python
  # -*- coding:utf-8 -*-
  # __Author__ = "Ma Qing"
  # __date__ = "2017/03/31"
  # __Desc__ = 一个最简单的类似于Java的MessageBox的小窗口
  
  import easygui as g
  #对于大部分的EasyGui函数都有默认参数,几乎所有的组件都会显示一个消息和标题。
  #标题默认是空字符串,信息通畅有一个简单的默认值
 #比如msgbox()函数标题部分的参数就是可选的,所以你调用msgbox的时候可以指定一个消息参数,例如:
 msg = g.msgbox("Hello Easy GUI")
 #当然你也可以指定信息参数和标题参数
 title = g.msgbox(msg="我一定要学会编程!",title="标题部分",ok_button="加油")

center_image

2、ccbox()

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

ccbox() 提供一个选择:Continue 或者 Cancel,并相应的返回 1(选中Continue)或者 0(选中Cancel)。注意 ccbox() 是返回整型的 1 或 0,不是布尔类型的 True 或 False。但你仍然可以这么写:

 

 import sys
 import easygui as g
 if g.ccbox("亲爱的还玩吗?",choices=("还要玩!","算了吧/(ㄒoㄒ)/~~")):
     g.msgbox("还是不玩了,快睡觉吧!")
 else:
     sys.exit(0)

center_image

3、ynbox()

老实说,这个函数和ccbox()功能一模一样……好像可以省略内容(呵呵)

4、buttombox()

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

可以使用 buttonbox() 定义自己的一组按钮,buttonbox() 会显示一组你定义好的按钮

当用户点击任意一个按钮的时候,buttonbox() 返回按钮的文本内容。如果用户取消取消或者关闭窗口,那么会返回默认选项(第一个选项)。请看例子:

 import easygui as g
 g.buttonbox(msg="你喜欢下面哪种水果?",title="",choices=("西瓜","苹果","喵莓"))

center_image

msg问题,题目,choices=选项(用逗号隔开)

5、indexbox()

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

基本跟上面一样,区别就是当用户选择第一个按钮的时候返回序列号0,选择第二个按钮时候返回序列号1

6、boolbox()

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

如果第一个按钮被选中则返回 1,否则返回 0。

7、在buttonbox()中显示图片

当你调用一个 buttonbox 函数(例如 msgbox(), ynbox(), indexbox() 等等)的时候,

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

import easygui as g
 g.buttonbox("大家说嗅嗅可爱吗?",image="xiuxiu.gif",choices=("可爱","不可爱","财迷"))

 8、choicebox()

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

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

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

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

综合我们之前学习的文件功能,举个通俗的例子

在这里呢,msg就是标题啦,choicess_lest就是可以选择的选项,用户可以用鼠标操控选择

 import easygui as g
 
 msg = "选择你喜欢的一种业余生活"
 title = ""
 choicess_list = ["看书","游泳","骑自行车","玩游戏"]
 reply = g.choicebox(msg,choices=choicess_list)

导入库的方式

4. 导入 EasyGui
为了使用 EasyGui 这个模块,你应该先导入它,最简单的导入语句是:
import easygui

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

另一种选择是导入整个 EasyGui 包:
from easygui import *

这使得我们更容易调用 EasyGui 的函数,你可以直接这样编写代码:
msgbox(...)


大家可以通过你不同的需求来加载库

9、mutchoicebox()

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

multchoicebox() 函数也是提供一个可选择的列表,与 choicebox() 不同的是,multchoicebox() 支持用户选择 0 个,1 个或者同时选择多个选项。
multchoicebox() 函数也是使用序列(元祖或列表)作为选项,这些选项显示前会按照不区分大小写的方法排好序。

 import easygui as g
 g.multchoicebox(msg="请选择你爱吃哪些水果?",title="",choices=("西瓜","香蕉","苹果","梨"))


10、enterbox()

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

enterbox() 为用户提供一个最简单的输入框,返回值为用户输入的字符串。

默认返回的值会自动去除首尾的空格,如果需要保留首尾空格的话请设置参数 喵=False。

也就是给对方一个可以输入内容的输入框

center_image

 import easygui as g
 g.enterbox(msg="请说出此时你的心里话",title="心里悄悄话")
11、interbox()

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

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

注意注意:大家在使用这个函数的时候一定要注意,这个只能用来让用户输入得分!

 import easygui as g
 g.integerbox(msg="请输入您的得分",title="分数统计",lowerbound=0,upperbound=100)

12、mulenterbox()

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

multenterbox() 为用户提供多个简单的输入框,要注意以下几点:

大家可以自行操作一下以下代码:
 import easygui as g
  
  msg = "请填写一下信息(其中带*号的项为必填项)"
  title = "账号中心"
  fieldNames = ["*用户名","*真实姓名","固定电话","*手机号码","QQ","*Email"]
  fieldValues = []
  fieldValues = g.multenterbox(msg,title,fieldNames)
  #print(fieldValues)
  while True:
     if fieldValues == None :
         break
     errmsg = ""
     for i in range(len(fieldNames)):
         option = fieldNames[i].喵()
         if fieldValues[i].喵() == "" and option[0] == "*":
             errmsg += ("【%s】为必填项   " %fieldNames[i])
17     if errmsg == "":
18         break
19     fieldValues = g.multenterbox(errmsg,title,fieldNames,fieldValues)
20 print("您填写的资料如下:%s" %str(fieldValues))

13、passwordbox()

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

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

 import easygui as g
 g.passwordbox(msg="请输入您的密码")
 import easygui as g
 msg = "请输入你的密码"
 user_password = g.passwordbox(msg)
 print(str(user_password))

14、multpasswordbox()

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

multpasswordbox() 跟 multenterbox() 使用相同的接口,但当它显示的时候,最后一个输入框显示为密码的形式("*"):

 import easygui as g
 msg = "请输入用户名和密码"
 title = "用户登录接口"
 user_info = []
 user_info = g.multpasswordbox(msg,title,("用户名","密码"))
 print(user_info)

15、textbox()

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

textbox() 函数默认会以比例字体(参数 codebox=1 设置为等宽字体)来显示文本内容(会自动换行哦),这个函数适合用于显示一般的书面文字。
注:text 参数(第三个参数)可以是字符串类型,列表类型,或者元祖类型。

 

笔记汇总:

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

例如,使用 EasyGui 来实现著名的“你好,世界!”程序是这样的:

import easygui as g
g.msgbox("Hello, world!")
对于所有函数而言,前两个参数是消息和标题。按照这个规律,在某种情况下,这可能不是最有利于用户的安排(例如,对话框在获取目录和文件名的时候忽略消息参数),但我觉得保持这种一致性贯穿于所有的窗口部件是一种更为重要的考虑!
   
绝大部分的 EasyGui 函数都有默认参数,几乎所有的组件都会显示一个消息和标题。标题默认是空字符串,信息通常有一个简单的默认值。
  
这使得你可以尽量少的去设置参数,比如 msgbox() 函数标题部分的参数就是可选的,所以你调用 msgbox() 的时候可以只指定一个消息参数,例如: >>> msgbox('喵小郑^_^') 复制代码
当然你也可以指定标题参数和消息参数,例如: >>> msgbox('喵小郑^_^', '斯坦心声')     在各类按钮组件里,默认的消息是"Shall I continue?",所以你可以不带任何参数地去调用它们。这里我们演示不带任何参数地去调用 ccbox(),当选择"cancel"或关闭窗口的时候返回一个布尔类型的值:
  1. if ccbox():
  2.         pass         # user chose to continue
  3. else:
  4.         return      # user chose to cancel
复制代码

我们也可以使用关键字参数调用 EasyGui 的函数


调用 EasyGui 函数还可以使用关键字参数哦。(如忘了的童鞋翻出《零基础入门学习Python》第18讲自行脑补)

现在假设你需要使用一个按钮组件,但你不想指定标题参数(第二个参数),你仍可以使用关键字参数的方法指定 choices 参数(第三个参数),像这样:
  1. >>> choices = ['愿意', '不愿意', '有钱的时候愿意']
  2. >>> reply = choicebox('你愿意购买资源打包支持小郑吗?', choices = choices)

使用按钮组件

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


8.1 msgbox()

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

msgbox() 显示一个消息和提供一个"OK"按钮,你可以指定任意的消息和标题,你甚至可以重写"OK"按钮的内容。
以下是 msgbox() 的实例函数:

  1. def msgbox(msg="(Your message goes here)", title="", ok_button="OK"):
  2.         ....
复制代码


重写"OK"按钮最简单的方法是使用关键字参数:

  1. >>> msgbox("我一定要学会编程!", ok_button="加油!")

8.2 ccbox()

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

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

注意 ccbox() 是返回整型的 1 或 0,不是布尔类型的 True 或 False。但你仍然可以这么写:

  1. if ccbox('要再来一次吗?', choices=('要啊要啊^_^', '算了吧T_T')):
  2.         msgbox('不给玩了,再玩就玩坏了......')
  3. else:
  4.         sys.exit(0) # 记得先 import sys 哈
复制代码



8.3 ynbox()


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

同上,都不知小郑在干啥......


8.4 buttonbox()

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


可以使用 buttonbox() 定义自己的一组按钮,buttonbox() 会显示一组你定义好的按钮。

当用户点击任意一个按钮的时候,buttonbox() 返回按钮的文本内容。如果用户取消取消或者关闭窗口,那么会返回默认选项(第一个选项)

 

蛋蛋在这里给大家飞镖一下

如果要记住用户的设置的话

该怎么办呢?

别急

小郑有招

哗哗哗,看:

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


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

  1. # 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()

   
   
如果要捕获异常呢?


exceptionbox()函数飞奔而至

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

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

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

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

好啦好啦

接下来我要呵呵呵呵了

以后大家可以欣赏一下本郑同学的小作品

emotion_编程猫_嗨起来

评论区打call


回复

上一页1 页 / 共 1下一页
爱因斯坦的弟子爱因斯坦的弟子

公告:第七期是一个转载有关技术人员必备库的内容

再下一期,我就教大家学tkinter啦!

将来还会讲到pygame深入版本以及基础知识

本人正在默默地学H喵L以及其他语言,会为大家坚持更新

推荐阅读爱因斯坦的弟子的教程的人员:喜欢Python课外拓展的同学以及喜欢编程的同学

是不是很期待我自己写的代码

以后告诉你~

点赞1


评论


520669已退猫520669已退猫

顶d

点赞0


评论


爱因斯坦的弟子爱因斯坦的弟子

汇总:第一期:https://shequ.codemao.cn/community/178600
第二期:https://shequ.codemao.cn/community/184311
第三期:https://shequ.codemao.cn/community/185418
第四期:https://shequ.codemao.cn/community/188747
第五期:https://shequ.codemao.cn/community/189560
第六期:https://shequ.codemao.cn/community/190290
第七期:

 

点赞0


评论


官方雷电猴官方雷电猴

加精推荐

点赞1


评论


祖星祖星

写的还不错,至少比其他的喵贴好多了,说实话,你提供的这个函数还是挺能吸引眼球的呢,不过H喵L个人不建议学习,觉得有点浪费时间了,多看看C++吧,要是做应用之类的Python应付不过来的,它编译太慢。。。能发掘一些库还是很有探索精神的嘛~

emotion_编程猫_搓头

 

点赞1


评论


dounsm36dounsm36

  

点赞0


评论


程序侯程序侯

cc和yn两个box的区别:cc返回一个整数,而yn返回一个布尔值

点赞0


评论


ᝰ悠乐小小怪&光小滑ᝰ悠乐小小怪&光小滑

Kitten

点赞0


评论


InkyRainInkyRain

干货满满~

点赞0


评论


圣世白羊圣世白羊

辛苦辛苦,我学会啦!

点赞0


评论


程序侯程序侯

爱因斯坦的弟子~

假如你一每秒200 000千米额速度直线匀速运动,你的一天等于我的几年?

答不上来,你就不是他的弟子哦~

点赞0


评论


程序侯程序侯

问一下,interbox非要设置最小值和最大值吗?emotion_编程猫_耍赖emotion_编程猫_伤心

点赞0


评论


蕉饼蕉饼

woc那么多

点赞0


评论


尼安菌尼安菌

大神我没看懂

点赞0


评论


程序侯程序侯

integerbox怎么没任何效果!完全就是:

def integerbox(……):
    while True:
        pass

点赞0


评论


DR大睿DR大睿

ybc_box 模块也行emotion_编程猫_冷漠

点赞0


评论


唯一的早晨唯一的早晨

其实大部分Python编写过程中,enterbox和msgbox是比较常用,其他要用到的话一般都是查手册吧(至少我是这样)

点赞0


评论


三尺五寸上仙三尺五寸上仙

666

点赞0


评论