Вы можете получить этот вывод, добавив обратный вызов «наблюдатель» к вашему IntVar
, который будет автоматически вызываться при каждом изменении его значения - см. Статью Классы переменных (BooleanVar, DoubleVar, IntVar, StringVar) .
Вот как я бы изменил ваш код для его использования. Обратите внимание на добавленный метод Notify()
. Я также прокомментировал ряд вещей, которые мне не нужны. Нет никаких оснований для State()
возвращать что-либо, поскольку оно будет вызываться только tkinter
, и эти wait_variable()
вызовы также не нужны (если вы сами явно вызываете mainloop()
).
import tkinter as tk
from tkinter import *
class Blah:
def __init__(self):
self.varAll = IntVar()
self.varAll.trace('w', self.Notify)
def Check(self):
but1 = Checkbutton(root, text='Selected', variable=self.varAll)
but1.pack(side=LEFT, pady=4)
b2 = tk.Button(root, text='Submit', command=self.State)
b2.pack(side=tk.LEFT, padx=5, pady=15)
# b2.wait_variable(self.varAll)
def State(self):
print('State: ', self.varAll.get())
self.state = self.varAll.get()
# return self.state
def Notify(self, *args):
print("output ", self.varAll.get())
def Main():
listt = Blah()
listt.Check()
# root.wait_variable(listt.varAll)
# print("output ", listt.varAll.get())
root.mainloop()
if __name__ == '__main__':
root = tk.Tk()
Main()