按下按钮后,重置日期输入框并在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()

解决方法

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

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>)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...