#python #tkinter
#python #tkinter
Вопрос:
Вот как выглядит мой код в настоящее время
sub1 = Tk()
sub1.title("Checklist")
sub1.geometry("1500x800")
def spawnButton():
if finalVar==5:
bQuit = Button(sub1, text="You are good to go!", command=destroy).grid(sticky="W", row=7, pady=10)
def destroy():
sub1.destroy()
var1 = IntVar()
var2 = IntVar()
var3 = IntVar()
var4 = IntVar()
var5 = IntVar()
finalVar = var1.get() var2.get() var3.get() var4.get() var5.get()
ck1 = Label(sub1, text="Here is a checklist to help you determine if you are ready to go out!").grid(sticky="W", row=0)
ck2 = Checkbutton(sub1, text="Face Mask", variable=var1, command=spawnButton).grid(sticky="W", row=1, pady=(30,0))
ck3 = Checkbutton(sub1, text="Hand Sanitizer", variable=var2, command=spawnButton).grid(sticky="W", row=2)
ck4 = Checkbutton(sub1, text="MySejahtera application installed on mobile phone", variable=var3, command=spawnButton).grid(sticky="W", row=3)
ck5 = Checkbutton(sub1, text="Wallet with enough money for expenditures", variable=var4, command=spawnButton).grid(sticky="W", row=4)
ck6 = Checkbutton(sub1, text="Identity Card", variable=var5, command=spawnButton).grid(sticky="W", row=5)
ck7 = Checkbutton(sub1, text="Driving License (if applicable)").grid(sticky="W", row=6)
Идея заключается в том, чтобы spawnButton() создавал кнопку, когда пользователь проверяет все ck2 — ck6 (ck7 не имеет значения), что затем позволит пользователю нажать кнопку и закрыть окно.
Код отлично работает в CMD, но когда я проверяю все ck2 — ck6, кнопка появляется не так, как я хочу.
Буду признателен за любую помощь. Спасибо!
Комментарии:
1. Значение присваивается
finalVar
один раз в начале. Вам нужно сделать это функцией или просто проверить значение от 1 до 5spawnButton
.2. @Wups Итак, если я переместил finalVar = var1.get() var2.get() var3.get() var4.get() var5.get() в spawnButton непосредственно перед оператором if, тогда это сработало бы? Я только что попробовал это, но кнопка все еще не появляется :/
3. Я только что протестировал. Это работает для меня.
4. У вас должен быть только один
Tk()
объект.sub1
Похоже, что переменная не единственная. Если вам нужно несколько окон, используйтеToplevel
виджет.
Ответ №1:
(заслуга @Wups)
Чтобы уточнить, вот обновленный код.
from tkinter import *
sub1 = Tk()
sub1.title("Checklist")
sub1.geometry("500x300")
def spawnButton():
finalVar = var1.get() var2.get() var3.get() var4.get() var5.get() # add this line
if finalVar==5:
bQuit = Button(sub1, text="You are good to go!", command=destroy).grid(sticky="W", row=7, pady=10)
def destroy():
sub1.destroy()
var1 = IntVar()
var2 = IntVar()
var3 = IntVar()
var4 = IntVar()
var5 = IntVar()
ck1 = Label(sub1, text="Here is a checklist to help you determine if you are ready to go out!").grid(sticky="W", row=0)
ck2 = Checkbutton(sub1, text="Face Mask", variable=var1, command=spawnButton).grid(sticky="W", row=1, pady=(30,0))
ck3 = Checkbutton(sub1, text="Hand Sanitizer", variable=var2, command=spawnButton).grid(sticky="W", row=2)
ck4 = Checkbutton(sub1, text="MySejahtera application installed on mobile phone", variable=var3, command=spawnButton).grid(sticky="W", row=3)
ck5 = Checkbutton(sub1, text="Wallet with enough money for expenditures", variable=var4, command=spawnButton).grid(sticky="W", row=4)
ck6 = Checkbutton(sub1, text="Identity Card", variable=var5, command=spawnButton).grid(sticky="W", row=5)
ck7 = Checkbutton(sub1, text="Driving License (if applicable)").grid(sticky="W", row=6)
sub1.mainloop()
Вывод