python - Tkinter 中复选框的奇怪行为
问题描述
所以,我正在学习,我被checkbuttons
这个Tkinter
奇怪的问题困住了。这是我正在使用的代码
root = Tk()
def showValue():
print(val.get())
Label(text=str(val.get())).pack()
val = StringVar()
Checkbutton(root, text="Check me!", variable=val, onvalue="on", offvalue="off").pack()
Button(text="Click",command=showValue).pack()
root.mainloop()
首先,默认情况下选中该框,我认为这是因为offvalue
设置为非 False(即不是 0 或空字符串),如果我错了,请纠正我。但是,我在这里注意到的奇怪的事情是,当我点击按钮时,理想情况下它应该向我显示一个带有 的标签text="on"
,但实际上直到我手动取消选择该框后才显示,之后按钮的行为正常。我知道我无法正确解释这里发生的事情,但如果你自己尝试一下,你会看到它。这是 GUI 的图像。
现在,您在按钮之后看到的两个空白行实际上是因为我在对复选框执行任何操作之前单击了两次按钮,并且一旦我取消选择复选框然后单击按钮,它就会显示
off
. 有人可以请这里实际发生的事情吗?提前致谢!
解决方案
你只需要使用StringVar(value="off")
. 这样做Label(text=str(val.get())).pack()
也会导致内存泄漏,但您必须使用config
将结果定位在同一位置Label.config(text=val.get())
。我已经重构了代码以使其更具可读性。
from tkinter import *
def showValue():
Label.config(text=val.get())
root = Tk()
val = StringVar(value="off")
check = Checkbutton(root, text="Check me!", variable=val, onvalue="on", offvalue="off")
check.pack()
btn = Button(text="Click",command=showValue)
btn.pack()
lbl = Label(root)
lbl.pack()
root.mainloop()
推荐阅读
- opencl - nVidia 上的 OpenCL NDRange 尺寸顺序错误?
- python - 如何使用 pytest-mock 或 magicmock 模拟导入的对象
- spring - 带有 HikariCP 和 PgPool-II 的 Spring Boot 应用程序
- c# - 如何在 Unity 3d 中跳转?
- react-native - App从后台进入前台时如何取消rn-fetch-blob任务
- html - 输入类型文件导致长时间加载
- c# - 如何修复以下显示此错误的代码
- java - 选择具有所有 IN 列表引用的行
- codeigniter - 无法使用使用回调的 codeigniter 验证来验证文本字段
- r - 波浪号运算符可用于构建匿名函数的一般性有哪些?