鱼C论坛

 找回密码
 立即注册

第035讲:图形用户界面easygui

已有 374 次阅读2018-5-7 23:36 |个人分类:零基础入门python课后习题

0.先练练手,把猜数字小游戏加上界面。
import random                           #导入随机数        
import easygui as g                     #导入easygui

g.msgbox("嗨,欢迎进入第一个界面小游戏^_^")                                  #显示一个界面显示“嗨,欢迎进入第一个界面小游戏^_^”
secret = random.randint(1,10)                                                                #将1~10之间的整数随机分配给secret变量

msg = "不妨猜一下小甲鱼现在心里想的是哪个数字(1~10):"            #
title = "数字小游戏"                                                                                 #
guess = g.integerbox(msg, title, lowerbound=1, upperbound=10)          #输入类型的界面integerbox的语法

while True:                                                                                              #永远循环
    if guess == secret:                                                                                       # 如果输入的数字等于secret变量中随机赋予的整数
        g.msgbox("我草,你是小甲鱼心里的蛔虫吗?!")                                            #界面显示“我草,你是小甲鱼心里的蛔虫吗?!”
        g.msgbox("哼,猜中了也没有奖励!")                                                             #界面显示“哼,猜中了也没有奖励!”
        break                                                                                                                #既然运行到此说明猜对了,就跳出while循环。注意if不是循环,所以跳出一层循环。
    else:                                                                                                             #否则
        if guess > secret:                                                                                               #如果猜的比secret中的变量大:
            g.msgbox("哥,大了大了~~~")                                                                            # 界面显示“哥,大了”
        else:                                                                                                                   #否则
            g.msgbox("嘿,小了,小了~~~")                                                                         #界面显示“嘿,小了,小了~~~”
        guess = g.integerbox(msg, title, lowerbound=1, upperbound=10)                     #继续界面显示输入数字给guess变量
            
g.msgbox("游戏结束,不玩啦^_^")                                                          #界面显示“游戏结束,不玩啦^_^”

1.实现一个用于登记用户账户信息的界面(如果是带*号的就是必填项,要求一定要有输入并且不能是空格)
import easygui as g                                                                  #调用easygui

msg = "请填写以下联系方式"                                                  #界面显示的内容为 "请填写以下联系方式"
title = "账号中心"                                                                     #标题内容为 "账号中心"  
fieldNames = [" *用户名","*真实姓名","*固定电话","*手机号码","QQ","*E-mail"]                              #界面显示的项目名称
fieldValues = []                                                                                                                                    #空列表
fieldValues = g.multenterbox(msg,title,fieldNames)                                                                             #将要显示的内容、标题、项目名称返回给一个列表fieldValues

while 1:                                                                                                                             #永远循环
if fieldValues == None:                                                                                                     #如果fieldValues等于None
break                                                                                                                                 #跳出while循环,执行while循环后的打印用户资料:None
errmsg = ""                                                                                                                       # 错误显示内容为空
for i in range(len(fieldNames)):                                                                                           #只要i在fieldNames的长度范围内,也就是将fieldNames中的每一个
option = fieldNames[i].strip()                                                                                              #将fieldNames中的每一项,删除字符串前边和后边的所有空格,赋给option变量。
                if fieldValues[i].strip() == "" and option[0] == "*":                                                             #如果fieldValues的每一项去除前后空格后还是空格并且fieldNames的第一个字符为*
errmsg += ('【%s】为必填项。\n\n'  % fieldNames[i])                                               #显示报错信息为对应的fieldNames项为必填项,+表示连接,若无则提示不全。
if errmsg == " ":                                                                                                                 #如果显示的报错信息为空
break      #跳出while循环
fieldValues = g.multenterbox(errmsg,title,fieldNames,fieldValues)     #界面显示输入包括报错信息,标题,项目名称,项目输入内容,赋给fieldValues。继续输
print("用户资料如下:%s" % str(fieldValues))  #以字符串形式打印出用户资料如下:输入的内容

2.提供一个文件夹浏览框,让用户选择需要打开的文本文件,打开并显示文件内容。
import easygui as g
import os
file_path = g.fileopenbox(default="*.txt")                                                            #调出打开文件界面,默认为.txt格式,赋给file_path变量       
with open(file_path) as f:
title =  os.path.basename(file_path)         
msg = "文件【%s】的内容如下:" % title
text = f.read()
g.textbox(msg,title,text)

3.在上一题的基础上增强功能:当用户点击“OK”按钮的时候,比较当前文件是否修改过,如果修改过,则提示“覆盖保存”,“放弃保存”或者“另存为.....”并实现相应的功能。
(提示:解决这道题可能需要点耐心,因为你有可能会被一个小问题卡住,但请坚持,自己想办法找到这个小问题所在并解决它!)

答:这道题会出现的一个小问题是easygui.textbox函数会在返回的字符串后边追加一个行结束符(“\n”),因此在比较字符串是否发生改变的时候我们需要人工将这个行结束符忽略。
import easygui as g
import os
file_path = g.fileopenbox(default="*.txt")                               #打开一个文件打开框
with open(file_path) as old_file:                                               #
title = os.path.basename(file_path)
msg = "文件【%s】的内容如下:" % title
text = old_file.read()
text_after = g.textbox(msg,title,text)

if text != text_after[:-1]:
# textbox 的返回值会追加一个换行符
choice = g.buttonbox("检测到文件内容发生改变,请选择以下操作:",“警告”,(“覆盖保存”,“放弃保存”,“另存为...”))
if choice == "覆盖保存":
pass
if choice == "另存为...":
another_path = g.filesavebox(default=".txt")
if os.path.splitext(another_path)[1] != '.txt':
another_path +='.txt'
with open(another_path,"w") as new_file:
new_file.write(text_after[:-1])

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-3 22:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部