介绍
这篇文章运用简单易懂的例子给大家介绍python利用tkinter实现一个点名小程序功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
代码如下所示:
进口datetime 进口json 进口操作系统 进口随机 进口tkinter像tk 进口openpyxl #花名册文件名 excel_file_path=盎?xlsx" #需在当前目录创建对应花名册.xlsx #工作表名 excel_sheet=癝heet1" #记录存储文件名 file_path=皀ame_record.json" #封装业务逻辑 类Call_Name: #私有化变量 _namelist=没有 #读取花名册 def __init__(自我): 世行=openpyxl.load_workbook (excel_file_path) get_sheet=wb (excel_sheet) list_data=https://www.yisu.com/zixun/[] first_row=True 试一试: 在get_sheet行: #忽略首行 如果first_row: first_row=False 继续 #读取第一个单元格数据 实验室的行: list_data.append (lab.value) 打破 除了: list_data=['空名单吗?”) 自我。_namelist=list_data #初始化记录 def _re_reset(自我): #记录使用日期 dls=[] .date dy=str (datetime.datetime.today () ()) dls.append (dy) #记录点名 记录={} 因为我在self._namelist: 记录(我)=0 name_record={“日期”:dls,“last_use”: dy,“记录”:记录} 返回name_record #创建记录 def mk_record(自我): jf_dict=self._re_reset () 打开(文件=file_path模式=' w ',编码=皍tf - 8”)作为摩根富林明: json。摩根富林明,转储(jf_dict缩进=2,sort_keys=True, ensure_ascii=False) #读取记录 def read_record(自我): 打开(文件=file_path模式=畆’,编码=皍tf - 8”)作为摩根富林明: jf_data=json.load(摩根富林明) 返回jf_data #产生随机姓名 def call_name(自我): 你=len (self._namelist) num=随机的。randint (ll) call_name=自我。_namelist (num - 1) 返回call_name #修改记录——警告! ! ! def re_mod(自我、name=没有re_date=None): jf_data=self.read_record () 记录=jf_data(“记录”) use_date=列表(jf_data[“日期”) 如果名称: v=记录[名字]+ 1 jf_data["记录"][名字]=v 如果re_date: use_date.append (re_date) jf_data=use_date“日期” jf_data (“last_use”)=re_date 打开(文件=file_path模式=' w ',编码=皍tf - 8”)作为摩根富林明: json。摩根富林明,转储(jf_data缩进=2,sort_keys=True, ensure_ascii=False) #获取记录次数 def re_times(自我): times_list=[] 记录=self.read_record()(“记录”) k、v record.items (): times_list.append (v) 返回times_list #返回记录次数 #获取被点到成员记录次数 def call_times(自我、名称): 记录=self.read_record()(“记录”) 返回记录[名称] #封装事件 类ForGUI: #初始化 re_date=没有 def __init__(自我): 试一试: cname=Call_Name () 除了: 味精(“文本”)="未找到:% s“% excel_file_path msg.update () 其他: 试一试: 记录=cname.read_record() #读取记录 除了: cname.mk_record() #读取异常则重新创建记录 记录=cname.read_record () 自我。re_date=记录(“日期”)#获取使用日期记录 #每5天初始化一次记录 如果len (self.re_date)> 5: cname.mk_record() #重新创建记录 #开始点名,输出有效姓名:姓名对应记录不为最大次数 def开始(自我): cname=Call_Name () *=cname.re_times() #获取记录次数 max_times=max(次)#获取记录最大次数 min_times=min(次)#获取记录最小次数 .date td=str (datetime.datetime.today()()) #获取当前日期 如果不是在self.re_date道明: cname.re_mod (re_date=td) 而真正的: name=cname.call_name() #产生随机姓名 *=cname.call_times(名字)#获取被点到成员记录次数 如果max_times !=min_times: 如果次!=max_times: cname.re_mod (name=名称)#修改记录 味精(“文本”)=名字 msg.update () 打破 其他: 继续 其他: cname.re_mod (name=名称)#修改记录 味精(“文本”)=名字 msg.update () 打破 #查看花名册 def open_name_excel(自我): 试一试: 操作系统。系统(“开始%退出”% excel_file_path) 除了: 味精(“文本”)='/n未找到花名册╮(╯▽╰)╭/n ' 味精(“字体”)=(18) msg.update () #查看点名记录 def open_record(自我): 试一试: 操作系统。系统(“开始%退出”% file_path) 除了: 味精(“文本”)='/n未找到点名记录╮(╯▽╰)╭/n ' 味精(“字体”)=(18) msg.update () #获取花名册名单 def get_name_list(自我): 试一试: 世行=openpyxl.load_workbook (excel_file_path) get_sheet=wb (excel_sheet) 除了: 味精(“文本”)="未找到:% s“% excel_file_path msg.update () 其他: list_data=[] first_row=True 在get_sheet行: #忽略首行 如果first_row: first_row=False 继续 #读取第一个单元格数据 实验室的行: list_data.append (lab.value) 打破 返回list_data #创建窗口 根=tk.Tk (className="点名工具”) #设置窗口大小 setWidth=300 setHeight=180 #获取屏幕分辨率 screenWidth=root.winfo_screenwidth () screenHeight=root.winfo_screenheight () int x=((screenWidth - setWidth)/2) int y=((screenHeight - setHeight)/2) #设置窗口初始位置屏幕居中 根。几何(“% sx % s + % s + % s”% (setWidth setHeight, x, y)) #设置窗口宽高固定 根。可调整大小的(0,0) #创建菜单栏 m1=tk。菜单(根,tearoff=False) #创建子菜单,不显示分窗 菜单条=tk。菜单(m1, tearoff=False) 菜单条。add_command(标签='查看名单”,命令=ForGUI () .open_name_excel) 菜单条。add_command(标签='查看记录”,命令=ForGUI () .open_record) 菜单条。add_command(标签='清空记录”,命令=Call_Name () .mk_record) #将子菜单加入菜单栏中 m1。add_cascade(标签='选项,菜单=菜单条) m1。add_command(标签=巴顺觥?命令=root.quit) #将菜单栏添加到窗口 root.config(菜单=m1) #创建文本显示 f1=tk。框架(根,bd=1,身高=150,宽度=200) 通过 f1.pack (pady=10) 味精=tk。标签(f1、文本="/n别紧张(●ˇ& # 8704;ˇ●)/n”, fg=奥躺?#创建文本控件 msg.pack (pady=10) 味精(“字体”)=(18) f2=tk.Frame(根) f2.pack (pady=10) #循环随机显示花名册名单 .get_name_list name_list=ForGUI () () def info (): t=随机的。randint (len (name_list)) 味精(“字体”)=(44) 味精(“文本”)=(name_list [t - 1]) def bt_listen (): 而bt(“状态”)==罢!? bt(“命令”)=bt_start bt('文本']="就决定是你了” 根。后(500年,信息) bt.update () 如果bt '文本']=="开始”: 打破 def bt_start (): bt(“命令”)=bt_listen bt('文本']="开始” fg=ForGUI () 根。null null null null null null nullpython利用tkinter实现一个点名小程序功能