【问题标题】:On-value-change type of event for widgets or use .trace_variable() technique?小部件的值更改类型的事件或使用 .trace_variable() 技术?
【发布时间】:2011-05-09 02:05:44
【问题描述】:

对于数据输入小部件(如 Entry、Text、Spinner、Checkbutton、Radiobutton)是否存在值更改类型的事件?通过值更改,我的意思是能够检测小部件的值何时由于键盘输入或剪切/删除/粘贴(和文本编辑_撤消/编辑_重做)活动而发生变化?我在 Tkinter 事件文档 [1] 中没有看到此类事件的描述。

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

[1]http://infohost.nmt.edu/tcc/help/pubs/tkinter/events.html

【问题讨论】:

  • 我认为 Bryan Oakley 对以下帖子 [1] 的回复回答了我的问题。引用:“绑定到按键不是正确的解决方案。例如,它不会处理您使用鼠标粘贴的情况。此外,在默认情况下,绑定到按键将在小部件自更新后更新之前触发发生在特定于小部件的绑定之后触发的类绑定中。文本变量和跟踪是要走的路。 [1]stackoverflow.com/questions/2524031/…
  • 我相信以下链接证实了 Bryan 的建议:effbot.org/tkinterbook/variable.htm

标签: python events user-interface tkinter ttk


【解决方案1】:

不同的小部件需要不同的解决方案。例如,复选按钮和单选按钮有一个命令选项,并且通过一个条目小部件,您可以使用内置的验证功能。

对于所有可以绑定到变量的小部件,执行变量跟踪是一种常见的解决方案。文本小部件是一个例外,因为您无法不费吹灰之力就把它与变量关联起来。

在 tcl/tk 世界中,我将我的所有小部件关联到一个数组(哈希映射/字典的 tcl 名称),然后在数组上放置一个单独的跟踪。不幸的是 tkinter 不直接支持 tcl 数组。但是,支持有点容易被入侵。有关更多信息,请参阅我对这个问题的回复:How to run a code whenever a Tkinter widget value changes?

【讨论】:

  • 您的 2 个示例——我最初引用的那个和高级 tcl 数组示例——回答了我的问题。非常感谢您在这些论坛中提供的帮助。
猜你喜欢
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多