python利用tkinter实现一个点名小程序功能

  介绍

这篇文章运用简单易懂的例子给大家介绍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
  null

python利用tkinter实现一个点名小程序功能