【问题标题】:Resetting Date Entry box and re-selection all check buttons in tkinter after button is pressed按下按钮后重置日期输入框并重新选择 tkinter 中的所有复选按钮
【发布时间】:2020-12-05 07:07:23
【问题描述】:

我使用 for 循环创建了多个复选框。在这里为简单起见,这些只是 5 个,但实际上最多 100 个。现在我想要的是当按下“提交”按钮时,然后随着与按钮关联的功能的执行,日期输入框应该再次显示初始date 即系统的日期以及所有未选中的复选框都应该再次选中,我的意思是一切都应该成为单击按钮之前的状态。 我尝试将所有复选框附加到列表中,并在列表中映射了一个函数 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()

【问题讨论】:

    标签: python python-3.x tkinter checkbox


    【解决方案1】:

    您只需对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>)
    

    【讨论】:

    • 但是已经创建了日期条目。我只是希望它在用户更改日期并按提交后设置回默认日期。您的意思是,解决方案是再次创建并打包日期条目?
    • 不,我的回答正好说明了该怎么做:在日期条目上调用 set_date 方法 (Date_entry.set_date(...))
    猜你喜欢
    • 2021-09-10
    • 1970-01-01
    • 2013-03-25
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2021-08-18
    • 1970-01-01
    相关资源
    最近更新 更多