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

2024-10-01 13:24:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我这里有一个简单的GUI,它假设返回一个布尔值,这取决于是否选中了check按钮。我将布尔变量设置为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()

当检查空按钮时,功能输出。。。在

^{pr2}$

既然按钮被选中了,它不应该返回True?在


Tags: 函数fromimportfalsetrue密码部件tkinter
1条回答
网友
1楼 · 发布于 2024-10-01 13:24:04

执行绑定回调后,布尔值将更改。举个例子,看看这个:

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()

当您按下check按钮时,第一个输出是False,然后是"The value was changed",这意味着该值在getBool回调完成后被更改。在

您应该做的是使用command参数来设置回调,看:

^{pr2}$

输出首先是"The value was changed",然后是True。在

对于我的示例,我使用boolvar.trace,它在布尔值改变时运行lambda回调('w'

相关问题 更多 >