我这里有一个简单的GUI,假设根据是否选中了复选按钮返回一个布尔值。我将布尔变量设置为False,因此空的检查按钮。我不明白的是,当我检查按钮时,绑定到该窗口小部件的功能返回False而不是True。那是为什么?
这是代码......
from tkinter import *
from tkinter import ttk
def getBool(event):
print(boolvar.get())
root = Tk()
boolvar = BooleanVar()
boolvar.set(False)
cb = Checkbutton(root, text = "Check Me", variable = boolvar)
cb.bind("<Button-1>", getBool)
cb.pack()
root.mainloop()
检查空按钮时,功能输出...
False
现在按钮被选中了,不应该返回True
吗?
答案 0 :(得分:1)
在进行绑定回调后更改布尔值。举个例子,看一下:
from tkinter import *
def getBool(event):
print(boolvar.get())
root = Tk()
boolvar = BooleanVar()
boolvar.set(False)
boolvar.trace('w', lambda *_: print("The value was changed"))
cb = Checkbutton(root, text = "Check Me", variable = boolvar)
cb.bind("<Button-1>", getBool)
cb.pack()
root.mainloop()
当您按下Checkbutton时,第一个输出为False
,然后是"The value was changed"
,这意味着在getBool
回调完成后该值已更改。
你应该做的是使用command
参数来设置回调,看看:
from tkinter import *
def getBool(): # get rid of the event argument
print(boolvar.get())
root = Tk()
boolvar = BooleanVar()
boolvar.set(False)
boolvar.trace('w', lambda *_: print("The value was changed"))
cb = Checkbutton(root, text = "Check Me", variable = boolvar, command = getBool)
cb.pack()
root.mainloop()
输出首先是"The value was changed"
,然后是True
。
对于我的示例,我使用boolvar.trace
,它在布尔值更改时运行lambda回调('w'
)