鱼C论坛

 找回密码
 立即注册
查看: 1331|回复: 0

[学习笔记] 第35讲图形用户界面入门动动手

[复制链接]
发表于 2020-8-25 15:18:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 yoyo2 于 2020-8-25 15:20 编辑
''' 
0. 先练练手,把我们的刚开始的那个猜数字小游戏加上界面吧?
import easygui as g
import random

secret = random.randint(1,10)
temp = g.enterbox(msg="不妨猜一下小甲鱼现在心里想的是哪个数字:",title="数字小游戏")
while True:
    try:
        guess = int(temp) 
        if guess == secret:
            g.msgbox(msg="我草,你是小甲鱼心里的蛔虫吗?!",title="数字小游戏",ok_button='你说呢?')
            g.msgbox("哼,猜中了也没有奖励!",title="数字小游戏",ok_button='反正我猜中了')
            break
        else:
            if guess > secret:
                g.msgbox(msg="哥,大了大了~~~",title="数字小游戏",ok_button='继续')
            else:
                g.msgbox(msg="哥,小了小了~~~",title="数字小游戏",ok_button='继续')
            temp = g.enterbox(msg="哎呀,猜错了,请重新输入吧:",title="数字小游戏")       
    except ValueError:      
            temp = g.enterbox(msg="哎呀,猜错了,请重新输入吧:",title="数字小游戏")
        
g.msgbox(msg="游戏结束,不玩啦^_^",title="数字小游戏")  
'''

''' 
1. 如下图,实现一个用于登记用户账号信息的界面(如果是带 * 号的必填项,要求一定要有输入并且不能是空格)
#这题还没完成,后面有时间再完成
import easygui
while True: 
    values = easygui.multenterbox(msg="【*真实姓名】为必填项。\n 【*手机号码】为必填项。\n【*E-mail】为必填项。",title='账号中心',fields=['*用户名','*真实姓名','固定电话','*手机密码','QQ','*E-mail'])
    if (values[0] == '') or (values[1] == '') or (values[3] == '') or (values[5] == ''):#空格怎么判断啊
        easygui.msgbox(msg="带*号为必填项",title="账号中心")
    else:
        break 
'''
'''
2.提供一个文件夹浏览框,让用户选择需要打开的文本文件,打开并显示文件内容。
'''
'''
import easygui as g
import os

path = g.diropenbox(msg="请选择一个文件夹",title="显示文件内容")
file = g.fileopenbox(default= path,filetypes= ['*.txt'])
with open(file) as f:
    old_file = f.read()
    g.codebox(msg= "文件【%s】的内容如下:" % os.path.split(file)[1], title="显示文本内容",text = old_file)#这里还以为test后面跟的是文件路径的,其实是要显示的文本内容
'''
'''
3.在上一题的基础上增强功能:当用户点击“OK”按钮的时候,比较当前文件是否修改过,如果修改过,则提示“覆盖保存”、”放弃保存”或“另存为…”并实现相应的功能。
'''
'''
import easygui as g
import os

def choice(new_file,file_name):
    choose = g.buttonbox(msg="检测到文件内容发生改变,请选择以下操作:",title="警告",choices=('覆盖保存','放弃保存','另存为'),default_choice= '放弃保存',cancel_choice='放弃保存')
    if choose == '覆盖保存':
        with open(file_name,'w') as f:
            f.write(new_file)
        return None#这貌似可以提高效率
    if choose == '另存为':
        path = g.diropenbox(msg="请选择一个文件夹",title="另存为")
        new_file_name = g.filesavebox(msg="请选择一个文件夹",title="另存为",default=path + os.path.splitext(file_name)[0])
        with open(new_file_name,'w') as f:
            f.write(new_file)
            g.msgbox(msg="保存成功",title="提示")
        return None
    if choose == '放弃保存':
        return None

try:
    file = g.fileopenbox(default='*',filetypes= ['*.txt'])
    with open(file) as f:
        old_file = f.read()
        new_file = g.codebox(msg= "文件【%s】的内容如下:" % os.path.split(file)[1], title="显示文本内容",text = old_file)#这里还以为test后面跟的是文件路径的,其实是要显示的文本内容
        #用户点‘OK’之后开始进行比较
        if old_file != new_file:
            choice(new_file,file)
except:
    g.exceptionbox() 
''' 
'''
4. 写一个程序统计你当前代码量的总和,并显示离十万行代码量还有多远?

    要求一:递归搜索各个文件夹
    要求二:显示各个类型的源文件和源代码数量
    要求三:显示总行数与百分比
'''
''' #coding:utf-8
import easygui as g
import os

def get_file(path):#已完成
    #进行统计
    os.chdir(path)
    for member in os.listdir(os.curdir):
        line = 0
        type = os.path.splitext(member)[1]
        if type in file_type:#文件类型正确,开始统计行数
            with open(member,'r',encoding='UTF-8') as f:
                print('正在分析文件:%s ...' % member)
                try:#统计行数
                    for each_line in f:
                        line += 1
                except UnicodeDecodeError:
                    pass#无法遇到避免格式不正确的文件
                try:#统计文件数
                    file_count[type] += 1
                except KeyError:
                    file_count[type] = 1
                try:#统计行数
                    line_count[type] += line
                except KeyError:
                    line_count[type] = line    
                           
        if os.path.isdir(member):
            get_file(path + os.sep + member)
            os.chdir(os.pardir)#忘记这步,递归调用后切记返回上一层,这里出错了

def print_sum():#打印结果    
    sum = 0
    aim = 100000
    text_print = []
    for i in line_count:
        lines = line_count[i]
        sum += lines
        text_print += ("【%s】源文件 %d 个,源代码 %d 行" % (i,file_count[i],lines))#不懂打印想要的格式

    msg = "您目前共累计编写了 %d 行代码,完成进度:%.2f %%\n离10万行代码还差 %d 行,请继续努力" % (sum , sum/1000,aim - sum)#不懂怎么输出百分数
    title="统计结果"
    g.textbox(msg,title,text_print)


file_type = ['.py']#要统计的文件类型
file_count = {}#统计文件个数
line_count = {}#统计文件类型与其对应的代码行数
path = g.diropenbox(msg="请选择您的代码库:",title="浏览文件夹",default='*')
get_file(path)
print_sum()
 '''
#看完答案,感觉自己代码的可读性很低,代码看起来思路不太清晰,哎~


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-1-11 05:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表