基于python tkinter的点名小程序功能的实例代码,花名册,次数,窗口,未找到,初始化

基于python tkinter的点名小程序功能的实例代码

易采站长站,站长之家为您整理了基于python tkinter的点名小程序功能的实例代码的相关内容。

代码如下所示:import datetimeimport jsonimport osimport randomimport tkinter as tkimport openpyxl# 花名册文件名excel_file_path = "花名册.xlsx"#需在当前目录创建对应花名册.xlsx# 工作表名excel_sheet = "Sheet1"# 记录存储文件名file_path = "name_record.json"#封装业务逻辑class Call_Name: # 私有化变量 _namelist = None # 读取花名册 def __init__(self): wb = openpyxl.load_workbook(excel_file_path) get_sheet = wb[excel_sheet] list_data = [] first_row = True try: for row in get_sheet: # 忽略首行 if first_row: first_row = False continue # 读取第一个单元格数据 for lab in row: list_data.append(lab.value) break except: list_data = ['空名单?'] self._namelist = list_data # 初始化记录 def _re_reset(self): # 记录使用日期 dls = [] dy = str(datetime.datetime.today().date()) dls.append(dy) # 记录点名 record = {} for i in self._namelist: record[i] = 0 name_record = {"date": dls, "last_use": dy, "record": record} return name_record # 创建记录 def mk_record(self): jf_dict = self._re_reset() with open(file=file_path, mode='w', encoding='utf-8') as jf: json.dump(jf_dict, jf, indent=2, sort_keys=True, ensure_ascii=False) # 读取记录 def read_record(self): with open(file=file_path, mode='r', encoding='utf-8') as jf: jf_data = json.load(jf) return jf_data # 产生随机姓名 def call_name(self): ll = len(self._namelist) num = random.randint(1, ll) call_name = self._namelist[num - 1] return call_name # 修改记录-----warning!!! def re_mod(self, name=None, re_date=None): jf_data = self.read_record() record = jf_data["record"] use_date = list(jf_data["date"]) if name: v = record[name] + 1 jf_data["record"][name] = v if re_date: use_date.append(re_date) jf_data["date"] = use_date jf_data["last_use"] = re_date with open(file=file_path, mode='w', encoding='utf-8') as jf: json.dump(jf_data, jf, indent=2, sort_keys=True, ensure_ascii=False) # 获取记录次数 def re_times(self): times_list = [] record = self.read_record()["record"] for k, v in record.items(): times_list.append(v) return times_list # 返回记录次数 # 获取被点到成员记录次数 def call_times(self, name): record = self.read_record()["record"] return record[name]#封装事件class ForGUI: # 初始化 re_date = None def __init__(self): try: cname = Call_Name() except: msg["text"] = "未找到:%s" % excel_file_path msg.update() else: try: record = cname.read_record() # 读取记录 except: cname.mk_record() # 读取异常则重新创建记录 record = cname.read_record() self.re_date = record["date"] # 获取使用日期记录 # 每5天初始化一次记录 if len(self.re_date) > 5: cname.mk_record() # 重新创建记录 # 开始点名,输出有效姓名:姓名对应记录不为最大次数 def start(self): cname = Call_Name() times = cname.re_times() # 获取记录次数 max_times = max(times) # 获取记录最大次数 min_times = min(times) # 获取记录最小次数 td = str(datetime.datetime.today().date()) # 获取当前日期 if not td in self.re_date: cname.re_mod(re_date=td) while True: name = cname.call_name() # 产生随机姓名 times = cname.call_times(name) # 获取被点到成员记录次数 if max_times != min_times: if times != max_times: cname.re_mod(name=name) # 修改记录 msg["text"] = name msg.update() break else: continue else: cname.re_mod(name=name) # 修改记录 msg["text"] = name msg.update() break # 查看花名册 def open_name_excel(self): try: os.system("start %s&exit" % excel_file_path) except: msg["text"] = '\n未找到花名册╮(╯▽╰)╭\n' msg["font"] = ('', 18) msg.update() # 查看点名记录 def open_record(self): try: os.system("start %s&exit" % file_path) except: msg["text"] = '\n未找到点名记录╮(╯▽╰)╭\n' msg["font"] = ('', 18) msg.update() # 获取花名册名单 def get_name_list(self): try: wb = openpyxl.load_workbook(excel_file_path) get_sheet = wb[excel_sheet] except: msg["text"] = "未找到:%s" % excel_file_path msg.update() else: list_data = [] first_row = True for row in get_sheet: # 忽略首行 if first_row: first_row = False continue # 读取第一个单元格数据 for lab in row: list_data.append(lab.value) break return list_data# 创建窗口root = tk.Tk(className="点名工具")# 设置窗口大小setWidth = 300setHeight = 180# 获取屏幕分辨率screenWidth = root.winfo_screenwidth()screenHeight = root.winfo_screenheight()x = int((screenWidth - setWidth) / 2)y = int((screenHeight - setHeight) / 2)# 设置窗口初始位置屏幕居中root.geometry("%sx%s+%s+%s" % (setWidth, setHeight, x, y))# 设置窗口宽高固定root.resizable(0, 0)# 创建菜单栏m1 = tk.Menu(root, tearoff=False)# 创建子菜单,不显示分窗MenuBar = tk.Menu(m1, tearoff=False)MenuBar.add_command(label='查看名单', command=ForGUI().open_name_excel)MenuBar.add_command(label='查看记录', command=ForGUI().open_record)MenuBar.add_command(label='清空记录', command=Call_Name().mk_record)# 将子菜单加入菜单栏中m1.add_cascade(label='选项', menu=MenuBar)m1.add_command(label='Exit', command=root.quit)# 将菜单栏添加到窗口root.config(menu=m1)# 创建文本显示f1 = tk.Frame(root, bd=1, height=150, width=200)passf1.pack(pady=10)msg = tk.Label(f1, text="\n别紧张(●ˇ∀ˇ●)\n", fg="green") # 创建文本控件msg.pack(pady=10)msg["font"] = ('', 18)f2 = tk.Frame(root)f2.pack(pady=10)# 循环随机显示花名册名单name_list = ForGUI().get_name_list()def info(): t = random.randint(1, len(name_list)) msg["font"] = ('', 44) msg["text"] = (name_list[t - 1])def bt_listen(): while bt["state"] == 'normal': bt['command'] = bt_start bt['text'] = "就决定是你了" root.after(500, info) bt.update() if bt['text'] == "开始": breakdef bt_start(): bt['command'] = bt_listen bt['text'] = "开始" fg = ForGUI() root.after(500, fg.start) bt.update()# 创建开始按钮bt = tk.Button(f2, text='开始点名喽', stat="normal", command=bt_listen, bd=4, width=20, font=18)bt.pack()root.mainloop()以上就是关于对基于python tkinter的点名小程序功能的实例代码的详细介绍。欢迎大家对基于python tkinter的点名小程序功能的实例代码内容提出宝贵意见

python点名代码_基于python tkinter的点名小程序功能的实例代码相关推荐

  1. 微信小程序背景音乐官方实例代码无效问题解决及音乐src获取方法

    微信小程序背景音乐官方实例代码无效问题解决及音乐src获取方法 参考文章: (1)微信小程序背景音乐官方实例代码无效问题解决及音乐src获取方法 (2)https://www.cnblogs.com/ ...

  2. java 随机手机验证码_基于Java随机生成手机短信验证码的实例代码|chu

    简单版 /** * 产生4位随机数(0000-9999) * * @return 4位随机数 */ public static String getFourRandom() { return Stri ...

  3. java+生成手机验证码_基于Java随机生成手机短信验证码的实例代码

    简单版 /** * 产生4位随机数(0000-9999) * * @return 4位随机数 */ public static String getFourRandom() { return Stri ...

  4. vue.js反编译_基于electron-vue开发的微信小程序反编译客户端

    开源一个小程序反编译客户端 咨询小程序反编译的同学比较多,虽然有开源库但是还是有同学不清楚如何去操作,所以索性做了一个客户端方便进行小程序的反编译 # 技术选型 网上已经有大佬实现了C#版的反编译工具 ...

  5. 微信小程序浮动按钮_操作按钮悬浮固定在微信小程序底部的实现代码

    本章节主要介绍了如何将操作按钮悬浮固定在微信小程序底部?操作起来也比较简单,还不会的朋友一起跟着小编学习一下吧,希望对你们有所帮助. 常见的有加入购物车按钮.结算按钮.收货列表添加地址按钮. 以收货地 ...

  6. python编码尺寸_基于Python批量生成指定尺寸缩略图代码实例

    这篇文章主要介绍了基于Python批量生成指定尺寸缩略图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 最近我们商城上架的应用越来越丰富了. ...

  7. python的坐标代码_基于Python的地图坐标服务接口调用代码实例

    代码描述:基于Python的地图坐标服务接口调用代码实例 关联数据:地图坐标服务 接口地址:http://www.juhe.cn/docs/api/id/32 #!/usr/bin/python # ...

  8. python 蓝牙开发_基于python实现蓝牙通信代码实例

    这篇文章主要介绍了基于python实现蓝牙通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 安装和示例 linux下安装 sudo apt ...

  9. python名片识别_基于Python的名片识别接口调用代码实例

    基于Python的名片识别接口调用代码实例 代码描述:基于Python的名片识别接口调用代码实例 #!/usr/bin/python # -*- coding: utf-8 -*- import js ...

最新文章

  1. 我的第一个Python程序
  2. Android 之View绘图原理总结
  3. 开源 协作工具_城镇如何使用开源工具进行协作和管理大文件
  4. gensim流式训练word2vec模型,不需要一次性加载完整数据集
  5. python之提升程序性能的解决方案
  6. VC6.0 Dialog 如何添加 WM_ERASEBACKGROUND 消息
  7. 腾讯游戏扫码登录小程序
  8. 怎么复制黑苹果config配置_Catia中端电脑配置推荐(黑苹果)
  9. android键盘表情流畅切换实现
  10. Origin Pro2022教育版官方申请、安装及汉化、续期
  11. AECC2019免费下载After Effects CC 2019中文完整破解版免费下载与安装教程...
  12. 中国天气预报API城市编号
  13. 什么是EasyUI,如何使用EasyUI?--easyui的十二种用法
  14. 数据迁移工具之DataX
  15. 全国大学生智能汽车竞赛图像采集处理上位机开源!
  16. excel 棒球数据游戏_使用librosa的棒球应用的音频发作检测数据准备
  17. pd.read_csv()中文乱码,解决方法
  18. 开关电源电路图及原理详解
  19. 长三角,珠三角各指什么地方
  20. Machine Learning ——客户流失率的预测

热门文章

  1. linux打开图形化命令,在Linux命令行中以图形化窗口打开文件夹
  2. 批量梯度下降python实现_python实现梯度下降算法的实例详解
  3. 动画 | 空调是怎么制冷的?
  4. 用积木做了个无人机。
  5. 会打乒乓球的机器人!
  6. 有一个懂机械、懂焊接、懂电子的爹是什么概念。。。
  7. 数据类型和运算符_月隐学python第3课
  8. php常见问题及其解决方案,PHP开源开发框架ZendFramework使用中常见问题说明及解决方案...
  9. php curl和file get,PHP cURL与file_get_contents
  10. 比亚迪汉鸿蒙系统测评_比亚迪汉性能强悍,麋鹿测试成绩超80km/h