Acu*_*bal 6 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()
Run Code Online (Sandbox Code Playgroud)
检查空按钮时,函数输出......
False
Run Code Online (Sandbox Code Playgroud)
True现在检查按钮不应该返回吗?
绑定回调完成后,布尔值会更改。举个例子,看看这个:
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()
Run Code Online (Sandbox Code Playgroud)
当您按下 Checkbutton 时,第一个输出是Falsethen it's "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()
Run Code Online (Sandbox Code Playgroud)
输出是 first "The value was changed"then True。
对于我的示例,我使用了boolvar.trace,它在布尔值更改时运行 lambda 回调 ( 'w')
| 归档时间: |
|
| 查看次数: |
6248 次 |
| 最近记录: |