Python 关于widget事件的值更改类型或使用.trace_variable()技术?

Python 关于widget事件的值更改类型或使用.trace_variable()技术?,python,events,user-interface,tkinter,ttk,Python,Events,User Interface,Tkinter,Ttk,对于数据输入小部件,如条目、文本、微调器、Checkbutton、Radiobutton,是否有一种on值更改类型的事件?关于值更改,我的意思是能够检测小部件的值何时因键盘输入或剪切/删除/粘贴(以及文本编辑\撤消/编辑\重做)活动而更改?我没有看到Tkinter事件文档[1]中描述的此类事件 是将Tkinter变量链接到我要监视的小部件值并使用这些变量的正确技术。trace_variable('w',…)方法绑定到值更改吗?这似乎是正确的方法,但我还没有在我所研究的Tkinter应用程序源代码

对于数据输入小部件,如条目、文本、微调器、Checkbutton、Radiobutton,是否有一种on值更改类型的事件?关于值更改,我的意思是能够检测小部件的值何时因键盘输入或剪切/删除/粘贴(以及文本编辑\撤消/编辑\重做)活动而更改?我没有看到Tkinter事件文档[1]中描述的此类事件

是将Tkinter变量链接到我要监视的小部件值并使用这些变量的正确技术。trace_variable('w',…)方法绑定到值更改吗?这似乎是正确的方法,但我还没有在我所研究的Tkinter应用程序源代码中看到太多trace_variable()的使用。。。这让我对使用这种方法持谨慎态度


[1] 不同的小部件需要不同的解决方案。例如,check按钮和单选按钮都有一个命令选项,使用entry小部件可以使用内置的验证功能

对于所有可以绑定到变量的小部件,执行变量跟踪是一个常见的解决方案。文本小部件是一个例外,因为如果不付出很多努力,就无法将其与变量关联


在tcl/tk世界中,我将所有小部件关联到一个数组(哈希映射/字典的tcl名称),然后在数组上放置一个跟踪。不幸的是,tkinter不直接支持tcl阵列。然而,支持有点容易侵入。有关更多信息,请参阅我对这个问题的回答:

我认为布赖恩·奥克利对以下帖子[1]的回答回答回答了我的问题。引述:“绑定到keypress不是正确的解决方案。例如,它不会处理使用鼠标粘贴的情况。此外,在默认情况下,对按键的绑定将在小部件更新之前触发,因为更新发生在类绑定中,类绑定在小部件特定绑定之后触发。Textvariables和traces是解决问题的方法。”[1]我相信下面的链接证实了Bryan的建议:。您的两个示例——我最初引用的示例和高级tcl阵列示例——回答了我的问题。非常感谢您在这些论坛上的帮助。