tkinter Checkbutton小部件返回错误的布尔值

时间:2017-05-15 02:12:38

标签: python tkinter python-3.5

我这里有一个简单的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吗?

1 个答案:

答案 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'