gpt4 book ai didi

python - tkinter Checkbutton 小部件返回错误的 bool 值

转载 作者:行者123 更新时间:2023-11-28 17:16:12 26 4
gpt4 key购买 nike

我这里有一个简单的 GUI,它会根据复选按钮是否被选中返回一个 bool 值。我已将 bool 变量设置为 False,因此设置了空的复选按钮。我不明白的是,当我检查按钮时,绑定(bind)到该小部件的函数返回 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 吗?

最佳答案

boolean 值在绑定(bind)回调完成后改变。举个例子,看看这个:

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,它会在 bool 值更改 ('w') 时运行 lambda 回调

关于python - tkinter Checkbutton 小部件返回错误的 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43970664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com