Состояние Tkinter CheckButton не меняется

Я делаю страницу входа в систему с помощью tkinter ..

Поэтому, когда пользователь нажимает кнопку CheckButton, я хочу, чтобы пароль отображался, а когда он не отмечен, я хочу, чтобы он был скрыт ... (отмечен звездочкой)

Я не могу изменить состояние CheckButton ...

Посмотрели несколько ответов, но это не решило мою проблему

Мой пример кода ниже:

from tkinter import *

win = Tk()
var = IntVar()
chk = Checkbutton(win, text='See password', variable=var)
chk.grid(row=4, column=1, pady=5)

if var.get():
    print("Checked")
else:
    print("Not checked..")

win.mainloop()

Когда я запускаю код, флажок по умолчанию не установлен. Поэтому после проверки он не печатает «Проверено».

Извините за глупые вопросы .. Я новичок в программировании.

Спасибо


person Aayanam Anirudh    schedule 03.11.2020    source источник
comment
Вы звоните var.get() примерно через миллисекунду после создания виджета. Пользователь не сможет даже увидеть виджет, а тем более не успеет по нему щелкнуть.   -  person Bryan Oakley    schedule 03.11.2020
comment
Да, я понял .... Как я могу изменить это так, чтобы, когда пользователь щелкает, я мог изменить состояние?   -  person Aayanam Anirudh    schedule 03.11.2020
comment
Это описано в доступной документации. Вы можете прикрепить команду к кнопке-флажку.   -  person Bryan Oakley    schedule 03.11.2020


Ответы (1)


Вы можете привязать свой IntVar() к функции, если ваш IntVar() изменился, ваша или функция будет выполняться:

from tkinter import *


def callback(a, b, c):
    if var.get():
        print("Checked")
    else:
        print("Not checked..")


win = Tk()
var = IntVar()
var.trace('w', callback)
chk = Checkbutton(win, text='See password', variable=var)
chk.grid(row=4, column=1, pady=5)

win.mainloop()
person CC7052    schedule 03.11.2020
comment
Спасибо, это мне помогло - person Aayanam Anirudh; 03.11.2020
comment
Это (немного) более сложный способ сделать это. Более простой способ - использовать атрибут command флажка. - person Bryan Oakley; 03.11.2020