零基础学习python_easygui(35课)

  今天学习的内容我觉得还是很有意思的,当然我主要也是从这个网址学的:http://bbs.fishc.com/thread-46069-1-1.html,大家可以直接看这个网址进行学习,当然也可以看看我的总结,嘻嘻^-^

  这里就不讲解安装的方法了吧,也比较简单,大家可以看刚刚那个网址或者百度安装。

1、导入模块的方式,第一种 import easygui as eg,推荐使用这种,起一个模块的别名,调用也方便也不会导致冲突;第二种是from easygui import *,这种的话不太建议,因为全部导入后模块的方法可能会与变量名起冲突。

2、msgbox(msg=‘(要打印的值)‘, title=‘ ‘, ok_button=‘OK‘, image=None, root=None)

一般的程序第一件事情就是打印hello world,我也不例外,让我们来打印一下hello world吧!

import easygui as eg
eg.msgbox(‘hello world‘)

你看就弹出下面的界面出来了,第一次看挺神奇的,嘻嘻。

对于所有的easygui的所有函数,前两个参数是消息和标题,刚刚我们没有设定标题,现在我们来试下。

eg.msgbox(‘hello my world‘,‘我是标题,哈哈哈‘,ok_button=‘加油啊!‘)

看上面一行是不是多了标题呢?

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

在各类按钮组件中,默认的消息是“Shall I continue”,所以可以不带任何参数去调用,看下面的例子:

import easygui as eg
def box():
    if eg.ccbox():
        pass
    else:
        return
box()

如果你看了鱼C的那个网址的话,它会报"return outside function",这里要注意下, return是返回一个方法的值,如果你没有定义一个方法却用return去返回的话这就坑爹了。看结果如下,点击continue就返回True,点击Cancel就返回Flase。

当然了,你也可以在ccbox写内容,看下面的例子:

import easygui as eg
import sys

if eg.ccbox("你想要玩啥呢?","选择",(‘玩游戏‘,‘玩泥巴!‘)):
    eg.msgbox("玩毛,走吧!")
else:
    sys.exit(0)

结果如下,这里说一下sys.exit(0)和sys.exit()还有sys.exit(1)、sys._exit(),sys._exit()会直接将python程序终止,之后的所有代码都不会继续执行;sys.exit()会引发一个异常:SystemExit,如果这个异常没有被捕获,那么python解释器将会退出。如果有捕获此异常的代码,那么这些代码还是会执行。捕获这个异常可以做一些额外的清理工作。0为正常退出,其他数值(1-127)为不正常,可抛异常事件供捕获。

4、choicebox(msg=‘Pick something.‘, title=‘ ‘, choices=())  选择的列表

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

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

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

  • 例如当按下键盘上的"g"键,将会选中的第一个以"g"开头的选项。
  • 再次按下"g"键,则会选中下一个以"g"开头的选项。
  • 在选中最后一个以"g"开头的选项的时候,再次按下"g"键将重新回到在列表的开头的第一个以"g"开头的选项。
  • 如果选项中没有以"g"开头的,则会选中字符排序在"g"之前("f")的那个字符开头的选项。
  • 如果选项中没有字符的排序在"g"之前的,那么在列表中第一个元素将会被选中。
import easygui as eg

msg = "你喜欢什么呢?"
title = "my love"
choice_list = ["打球","看电影","玩手机","约会"]
result = eg.choicebox(msg,choices=choice_list)

显示结果如下:

5、ynbox()

这个函数和ccbox()功能一样,额,就不说了

6、buttonbox(msg=‘‘, title=‘ ‘, choices=(‘Button1‘, ‘Button2‘, ‘Button3‘), image=None, root=None)

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

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

import easygui as eg
eg.buttonbox(msg="你喜欢下面哪种水果?",title="水果选择",choices=("哈密瓜","苹果","荔枝"))

结果如下,不知道为啥关不掉,只能选择一个:

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

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

你看返回值不一样而已,其余一样。

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

如果第一个按钮被选中则返回 1,否则返回 0。结果看看下面的例子就可以了

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

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

import easygui as eg
eg.buttonbox(‘请问你是谁?‘,image=‘como.jpg‘,choices=(‘左‘,‘中‘,‘右‘))

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

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

大家可以看下这个可以全选也可以不选

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

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

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

import easygui as eg
eg.enterbox("请说出你爱的人",title=‘大胆的说吧,放心我听不到的!‘)

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

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

import easygui as eg
eg.integerbox("请输入你对自己的满意度!",lowerbound=-100,upperbound=100)

13、passwordbox(msg=‘Enter your password.‘, title=‘ ‘, default=‘‘, image=None, root=None)

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

import easygui as eg
eg.passwordbox(‘请输入密码‘)

14、multenterbox(msg=‘Fill in values for the fields.‘, title=‘ ‘, fields=(), values=())

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

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

下面来做一个题目,就是达到下面这张图的效果,带*必填,错了提示用户哪里没填写,直到用户取消或者填写了必填项:

代码如下:

import easygui as eg

msg = ‘[*真实姓名]为必填项。\n \n [*真实姓名]为必填项。\n \n [*手机号码]为必填项.\n \n [*E-mail]为必填项。‘

title = ‘用户信息填写‘

field = (‘*用户名‘,‘*真实姓名‘,‘固定电话‘,‘*手机号码‘,‘QQ‘,‘*E-mail‘)

input_value = []
input_value = eg.multenterbox(msg,title,field)

while True:
    if input_value == None:
        break
    errmsg = ""
    for i in range(len(input_value)):
        option = field[i].strip()
        if option[0] == "*" and input_value[i].strip() =="":
            errmsg += ("【%s】为必填项\n"%field[i])
    eg.msgbox(errmsg)
    if errmsg == "":
        break
    input_value = eg.multenterbox(msg,title,field)
print("您填写的资料如下:%s" %str(input_value))

15、multpasswordbox(msg=‘Fill in values for the fields.‘, title=‘ ‘, fields=(), values=())

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

import easygui as eg
msg ="登录"
eg.multpasswordbox(msg,fields=(‘用户名‘,‘密码‘))

下面是结果图,跟上面的multenterbox() 基本一致。

16、textbox(msg=‘‘, title=‘ ‘, text=‘‘, codebox=0) 

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

17、codebox(msg=‘‘, title=‘ ‘, text=‘‘) 

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

18、diropenbox(msg=None, title=None, default=None

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

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

这个大家敲一下命令就知道了,再学一下打开文件等下做一下相关的题目就知道了。

19、fileopenbox(msg=None, title=None, default=‘*‘,filetypes=None

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

关于default参数的设置方法:

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

举个例子:

  defalut="d:/liu/hello*.py"即显示D盘liu文件夹下所有名字以hello开头的python文件

关于filetypes参数的设置方法:

  • 可以包含文件掩码的字符串列表,例如:filetypes = ["*.txt"]
  • 可以是字符串列表,列表的最后一项字符串是文件类型的描述,例如:filetypes = ["*.css",["*.html","HTML files"]]

20、filesavebox(msg=None, title=None, default=‘‘,filetypes=None

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

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

filetypes参数的设置方法请参考上边。

看我这么多,给大家个题目做做吧。

题目:1、提供一个文件夹浏览器,让用户选择需要打开的文本文件,打开并显示文件内容,且标题为当前文件的名字。

自己动手后再看如下代码:

import easygui as eg
import os

msg = "你的选择"
defaluts = "D:\\*.txt"

open_file = eg.fileopenbox(msg,default=defaluts)

with open(open_file) as f:
    title = os.path.basename(open_file)
    msg1 = "文件【%s】内容是:" % title
    text = f.read()

    eg.textbox(msg,title,text)

2、结合上一题再深入一点,当用户点击“Ok”按钮的时候,比较当前文件是否修改过,如果修改过,则提示“覆盖保存”、“放弃保存”或“另存为…”,并实现相应的功能。

代码如下:

 import easygui as eg
import os

msg = "你的选择"
defaluts = "D:\\*.txt"

open_file = eg.fileopenbox(msg,default=defaluts)

with open(open_file) as f:
    title = os.path.basename(open_file)
    msg1 = "文件【%s】内容是:" % title
    old_text = f.read()

    new_text = eg.textbox(msg,title,old_text)

if old_text != new_text[:-1]:
    msg = ‘文件修改过,你想进行哪种操作?‘
    choice = (‘覆盖保存‘,‘放弃保存‘,‘另存为‘)
    choice_last = eg.buttonbox(msg=msg,choices=choice)

    if choice_last == ‘覆盖保存‘:
        with open(open_file,‘w‘) as f:
            f.write(new_text[:-1])

    elif choice_last == ‘另存为‘:
        new_file = eg.filesavebox()
        if os.path.splitext(new_file)[1] != ‘.txt‘:
            new_file += ‘.txt‘
        with open(new_file,‘w‘) as f:
            f.write(new_text[:-1])     

    else:
        pass

3、写一个程序统计你当前代码总量的和,并显示离十万行代码量还有多远

  • 要求一:递归搜索各个文件
  • 要求二:显示各个类型的源文件和源代码数量
  • 要求三:显示总行数与百分比

真心觉得这道题目不错,大家可以仔细琢磨琢磨,嘻嘻

#coding=utf-8
import os
import easygui as eg

def show_result(start_dir):
    lines = 0
    total = 0
    text = ""

    for i in source_list:
        lines = source_list[i]
        total += lines
        text += "【%s】源文件 %d 个,源文件 %d 行\n" %(i,file_list[i],lines)
    title = ‘统计结果‘
    msg = ‘你目前共累计编写了%d 行代码,完成进度:%.2f %%\n ,离10万行代码还差 %d 行,请继续努力!‘%(total,total/1000,10000-total)
    eg.textbox(msg,title,text)

def calc_code(file_name):
    lines = 0
    with open(file_name) as f:
        print(‘正在分析文件:%s ...‘%file_name)
        try:
            for each_line in f:
                lines += 1

        except UnicodeDecodeError:
            pass #可能遇到格式不兼容的文件,这里忽略掉

    return lines

def search_file(file_path):
    os.chdir(file_path)

    for each_file in os.listdir(os.curdir):
        ext = os.path.splitext(each_file)[1]
        if ext in target:
            lines = calc_code(each_file)    #统计行数
            #还记得异常的用法吗?如果字典中不存在,抛出KeyError,则添加字典键
            #统计文件数

            try:
                file_list[ext] += 1
            except KeyError:
                file_list[ext] = 1

            #统计源代码行数
            try:
                source_list[ext] += lines
            except KeyError:
                source_list[ext] = lines

        if os.path.isdir(each_file):
            search_file(each_file) #递归调用
            os.chdir(os.pardir)   #递归完后返回上一级目录

target = [‘.c‘,‘.cpp‘,‘.py‘,‘.java‘,‘.pas‘]
file_list = {}
source_list = {}

eg.msgbox("请打开你存放所有代码的文件夹。。。统计代码量")

file_path = eg.diropenbox("请选择你的代码库:")

search_file(file_path)
show_result(file_path)

21、exceptionbox 捕获异常,这个与python代码的捕获异常类似 

import easygui as eg

try:
    int(‘Exception‘)
except:
    eg.exceptionbox(‘int类型数据转换错误!请检查您的数据类型!‘)
时间: 2024-11-17 17:44:27

零基础学习python_easygui(35课)的相关文章

蓝鸥零基础学习HTML5—html+css基础

蓝鸥零基础学习HTML5-html+css基础 一.课程目标 1.了解前端开发职位:2.掌握常用标签以及语义及用法:3.掌握常用css的特性,掌握基础布局技巧:4.掌握整站规划概念. 二.适用人群 零基础积极学习html5者 三.课程简介 本课程主要讲解了 html+css的基础知识,包括html模板.标签.css基础样式.布局.表格表单.整站等等,是进行前端开发的基础.Html+css是前端开发的基础,大部分前端开发工程都需要从html+css布局开始,html+css的基础非常重要,是前端开

零基础学习Mahout之一:搭建单机环境

一.Mahout是什么? Mahout是Apache的一个开源项目(http://mahout.apache.org/),提供了机器学习领域的若干经典算法,以便开发人员快速构建机器学习和数据挖掘方面的应用. Mahout是基于Hadoop的.从名称上看也很有意思,Hadoop是一个大象的名字,而Mahout则是象夫.看象人,可见二者联系之紧密.(这让我自然联想到Sun和Eclipse...) 我此时是一个完全没用过Mahout的门外汉,对Hadoop也没有实际使用经验,算是真正的零基础.我的目标

零基础学习嵌入式需要注意哪些知识

一直以来对于零基础学习嵌入式的同学都非常的敬佩,毕竟这需要付出比别人更多的努力,才能追平那些本专业有编程基础的同学.从我本人而言,见过零基础学习嵌入式的同学并不在少数.今天主要谈谈零基础学习嵌入式需要注意哪些知识. 首先一定远离负能量的人,我曾记得有这样的一句话"近墨者黑 近朱者赤".这些影响还是很大的.如果一个人整天在你耳边说学这没用.学那没用.立马让滚蛋.我相信这都是坑友的,当然让你别吃喝嫖赌抽这些才是好人! 那么零基础学习嵌入式需要注意哪些知识? 零基础学习嵌入式会涉及到编程,编

salesforce 零基础学习(五十二)Trigger使用篇(二)

第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. 十七篇链接:salesforce 零基础学习(十七)Trigger用法 有的时候对于sObject的trigger处理复杂的情况下,比如一个sObject的before update要实现功能1,2.....n功能情况下,Handler中需要在before update写实现功能1--n的代码.然而

salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随便的取一个审批人了,有以下方式针对不同的场景可以获取到当前记录的最终审批人以及审批意见. 邮件内容使用以下几种方式实现: 1.代码里面实现邮件发送 2.email template(text/html/custom) 3.visualforce emailTemplate 对发送邮件方式不清楚的,可

salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的使用此标签进行解析附件内容,后台只要声明String类型变量用来存储附件名称,Blob类型变量用来存储附件的内容即可. 但是当我们的项目整体使用第三方的前端框架,例如VUE或者angular等前端框架时,有时使用apex:inputFile反而不是很方便,需要用到html的原生的附件上传的标签<inpu

零基础学习 Hadoop 如何下手

想学习hadoop,可是苦于自己没有任何的基础,不知道该如何下手,也不知道自己能不能学会.其实零基础学习hadoop,没有想象的那么困难.曾经我也是一位小白,刚接触到云计算,想过培训,但是培训机构的选择也让我很纠结,就自己开始去摸索学习,现在我把自己的学习思路整理一下,希望对大家有帮助. 首先整体说一下学习过程给大家借鉴: 一.了解hadoop: 这里不具体阐述概念,有兴趣的同学可以自己上网去查.我们知道hadoop,有单机安装,伪分布安装和分布安装.同时hadoop的环境是Linux,所以我们

Yaf零基础学习总结3-Hello Yaf

Yaf零基础学习总结3-Hello Yaf 上一次我们已经学习了如何安装yaf了,准备工作做好了之后我们来开始实际的编码了,码农都知道一个经典的语句就是“Hello World”了,今天我们开始入手Yaf,目标只要能得到“Hello Yaf”就可以了,不多说,下面开始了.(注:需要读者有一定的MVC知识基础,最好用过一些其他简单的框架) 1.组织目录结构 对于使用过框架的来说这点很好理解,对于没使用过框架的来说建议先别在这死磕,先记着吧,简单点就是对于我们的文件结构做一些规定,让自己和别人都能看

[原]零基础学习SDL开发之在Android使用SDL2.0显示BMP图

关于如何移植SDL2.0到安卓上面来参考我的上一篇文章:[原]零基础学习SDL开发之移植SDL2.0到Android 在一篇文章我们主要使用SDL2.0来加载一张BMP图来渲染显示. 博主的开发环境:Ubuntu 14.04 64位,Eclipse + CDT + ADT+NDK 博主曾经自己使用NDK编译出了libSDL2.so,然后使用共享库的方式来调用libSDL2中的函数,结果发现SDL\src\core\android\SDL_android.c 这个jni函数写的实在是不够自己另外做