如何解决Tkinter Checkbutton 小部件上的单击事件不会在 GUI 上直观地更新小部件,但会在代码中更新
Tl;dr:我们如何(我们可以从哪里获得信息)在此系统表示层对 Tkinter 进行故障排除? Tkinter 的维护者肯定会在某处记录一份指南。有什么想法可能导致这种“wtf?”体验?
注意!为了支持未来的故障排除事件,目标是了解根本原因,以便它可以在其他地方复制,然后应用修复。
问题:
在此特定的 Kubuntu KDE plasma 5.18 机器配置上单击复选框时,Checkbutton 小部件不会更新。
调查:
在以下环境中未出现此问题:
- Windows 8.1,
- 带有 LiveCD Kubuntu 20.04 (plasma 5.18) 的 VirtualBox,
- 带有 LiveCD Kubuntu 20.10 (plasma 5.19) 的 VirtualBox,
- Kubuntu 20.04(原始机器上的 XFCE)。
使用其他 GUI 框架进行测试可以正常工作。
- 基维
- GTK 版本 3
- wxPython
下一步:
- 搜索结果并未真正提供与此特定相关的指南或问题。
- 还请咨询有关 python org discuss platform 的建议。
- 尝试创建 TCL 测试版本。
测试源代码:
from tkinter import *
class MyGUI:
def __init__(self,window):
self.var = Intvar()
self.c = Checkbutton(window,text="Enable Tab",variable=self.var,command=self.cb)
self.c.pack()
def cb(self):
print("self.var is",self.var.get())
if __name__ == "__main__":
root = Tk()
gui = MyGUI(root)
root.mainloop()
输出:
>self.var is 1
>self.var is 0
>self.var is 1
系统规格:
操作系统:Kubuntu 20.04
KDE 等离子版本:5.18.5
KDE 框架版本:5.68.0
Qt 版本:5.12.8
内核版本:5.4.0-58-generic
操作系统类型:64 位
处理器:英特尔 i3 4 核 M350 2.27GHz
内存:7,6 GiB 内存
Python 3.8.5
Tcl/Tk 8.6 版
解决方法
答案、解决方案和结论
根本原因是与“Breeze Dark”相关结果的“KDE Plasma Color Schemes”的“Window Text”颜色由于文本颜色与复选框背景非常相似,因此 Tkinter Checkbutton 不是 100% 可见。
解决方案/变通办法
建议在构建应用程序 GUI 时考虑样式(主题),通过使他们能够在某种程度上更改 GUI 来改善用户体验。在这种情况下,Tkinter 似乎正在使用用于其他目的的系统设置值。
最快的解决方法是至少导入 tkinter.ttk (Python3)。
from tkinter import *
from tkinter.ttk import *
结论
我猜这会随着更多信息的可用而更新。
对于上述问题,幸运的是问题相对简单,应该是错误确认清单的一部分。然而,调试要复杂得多、模糊得多,或者是一门黑暗的艺术。以下是支持故障排除和调查 Tkinter 相关问题的一些说明。
- 由于 Tkinter 是 Tcl/tk 解释器的包装器,所以事情变得棘手。 Tkinter 源可以位于 GitHub。
- 似乎起点是完成 Tcl Developer Xchange。来自相当活跃的社区的良好参考资料和资源。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。