鱼C论坛

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

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

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

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

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

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

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

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

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

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

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

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

  89. def get_file(path):#已完成
  90.     #进行统计
  91.     os.chdir(path)
  92.     for member in os.listdir(os.curdir):
  93.         line = 0
  94.         type = os.path.splitext(member)[1]
  95.         if type in file_type:#文件类型正确,开始统计行数
  96.             with open(member,'r',encoding='UTF-8') as f:
  97.                 print('正在分析文件:%s ...' % member)
  98.                 try:#统计行数
  99.                     for each_line in f:
  100.                         line += 1
  101.                 except UnicodeDecodeError:
  102.                     pass#无法遇到避免格式不正确的文件
  103.                 try:#统计文件数
  104.                     file_count[type] += 1
  105.                 except KeyError:
  106.                     file_count[type] = 1
  107.                 try:#统计行数
  108.                     line_count[type] += line
  109.                 except KeyError:
  110.                     line_count[type] = line   
  111.                            
  112.         if os.path.isdir(member):
  113.             get_file(path + os.sep + member)
  114.             os.chdir(os.pardir)#忘记这步,递归调用后切记返回上一层,这里出错了

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

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


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



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-28 04:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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