Tkinter开发考勤程序如何为每个按钮绑定独立计数触发函数
问题根因
- 所有Label共用同一个全局
IntVar变量,修改该变量的值会同步刷新所有绑定了该变量的标签显示 - 预先定义的工厂回调函数未实际绑定到按钮,代码中还引用了不存在的
clicked回调函数 - 未为每个员工单独创建独立的计数存储变量
修复后可运行代码
from tkinter import * staff=['GEORGE ', 'JAMES ', 'THOMAS', 'MATHEW', 'CLETUSCRUZ', 'FREDY', 'PAUL', 'MEGANI', 'BILL', 'JULIA '] def factory(number): def f(): number.set(number.get()+1) return f window = Tk() window.title(" Duty List") window.geometry('320x900') row_value =3 for name in staff: # 为每个员工单独创建计数变量 count_var = IntVar(value=0) # 绑定专属回调 ibutton = Button(window, text=name, command=factory(count_var)) ibutton.grid(column=1, row=row_value) ilabel = Label(window, textvariable=count_var) ilabel.grid(column=2,row=row_value) row_value+=1 window.mainloop()
核心修改说明
- 删除了原代码中无效的
functions列表相关冗余代码 - 遍历员工列表时为每个员工单独实例化
IntVar存储个人计数,初始值设为0 - 用工厂函数为每个按钮生成专属的回调,点击时只会修改对应员工的计数变量
内容的提问来源于stack exchange,提问作者Gopakumar PB
相关产品推荐
相关产品推荐

