我是Tkinter和Python的新手。我正在使用一些复选框和按钮功能。我希望输出为output: 0, output: 1,...
(0表示未选中复选框,而1表示选中复选框)。每当按下“提交”按钮时,将打印输出。由于此刻开始只打印一次
我只是想知道是否有办法做到这一点
谢谢您,祝您有美好的一天:)
import tkinter as tk
from tkinter import *
root = tk.Tk()
class Blah:
def __init__(self):
self.varAll = IntVar()
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 Main():
listt = Blah()
listt.Check()
#root.wait_variable(listt.varAll)
print("output ", listt.varAll.get())
if __name__ == '__main__':
Main()
答案 0 :(得分:0)
您缺少.mainloop
。在Main
语句后的print
函数中将其添加为:
def Main():
listt = Blah()
listt.Check()
#root.wait_variable(listt.varAll)
print("output ", listt.varAll.get())
root.mainloop()
答案 1 :(得分:0)
您可以通过在IntVar
上添加“观察者”回调来获得该输出,只要其值发生更改,该回调就会被自动调用-请参阅文章The Variable Classes (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()