#python #python-3.x #tkinter #checkbox
#python #python-3.x #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()
Ответ №1:
Вам просто нужно вызвать set
каждую из переменных в varis
.
def submit_attendance():
...
for var in varis:
var.set(1)
Что касается ввода даты, сначала вам нужно создать его и разложить в два этапа, что, как правило, в любом случае является наилучшей практикой:
Date_Entry = DateEntry(frame, date_pattern = 'dd/mm/yyyy')
Date_Entry.pack()
Затем вы можете использовать метод set_date на Date_Entry
, чтобы установить его на любую дату / время, которые вы хотите.
Date_Entry.set_date(<whatever date you want>)
Комментарии:
1. Но запись даты уже создана. Я просто хотел вернуть дату по умолчанию после того, как пользователь изменит дату и нажмет отправить. Вы имеете в виду, что решение состоит в том, чтобы снова создать и упаковать запись даты?
2. Нет, в моем ответе точно сказано, что делать: вызовите
set_date
метод для ввода даты (Date_entry.set_date(...)
)