Как мне заставить мою кнопку отображаться после выполнения условия?

#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 до 5 spawnButton .

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

Вывод

Контрольный список