重置日期输入框,并在按下按钮后重新选择tkinter中的所有复选按钮



我使用for循环创建了多个复选框。为了简单起见,这里只有5个,但实际上它们多达100个。现在我想要的是当";提交";按钮,然后随着与按钮相关的功能的执行,日期输入框应该再次显示初始日期,即系统的日期,并且所有未选中的复选框应该再次被选中,我的意思是,一切都应该变成单击按钮之前的样子。我试图将所有复选框附加到列表中,并在列表上映射一个函数lambda x:x.select((,但没有成功。那么,现在最好的解决方案是什么呢?

from tkinter import *
from tkcalendar import DateEntry
import tkinter.messagebox as tkm
def submit_attendance():
tkm.showinfo('Success', 'Attendance is taken.')
root = Tk()
frame = Frame(root)
frame.pack()
enterDate_Label = Label(frame, text = 'Select Date : ').pack()

Date_Entry = DateEntry(frame, date_pattern = 'dd/mm/yyyy').pack()
note_Label = Label(frame, text = 'Note: Uncheck the boxes for absentees').pack()
text = Text(frame, cursor = 'arrow')
text.pack()
students = [{'Reg': '2018-MC-01', 'Name': 'Hussain Ahmed'},
{'Reg': '2018-MC-02', 'Name': 'Kamran Akmal'},
{'Reg': '2018-MC-03', 'Name': 'Virat Kohli'},
{'Reg': '2018-MC-04', 'Name': 'Abdul Ghani'},
{'Reg': '2018-MC-05', 'Name': 'Hafiz Faizan Shahid'}]
varis = []
for std in students:
reg = std['Reg']
name = std['Name']
var = StringVar()
cb = Checkbutton(text, text = f"{reg}t{name}", variable = var, offvalue = f"{reg}t{name}")
cb.select()
text.window_create('end', window=cb)
text.insert('end', 'n')
varis.append(var)
Button(frame, text='Submit'.upper(), command = submit_attendance).pack()
mainloop()

您只需要对varis中的每个变量调用set

def submit_attendance():
...
for var in varis:
var.set(1)

至于日期条目,您首先必须创建它并分两步进行布局,这通常是最佳实践:

Date_Entry = DateEntry(frame, date_pattern = 'dd/mm/yyyy')
Date_Entry.pack()

然后,您可以在Date_Entry上使用set_date方法将其设置为您想要的任何日期/时间。

Date_Entry.set_date(<whatever date you want>)

最新更新