Tcl / Tk将任何窗口小部件的更改绑定到脚本

时间:2013-01-04 14:27:51

标签: tcl tk

这是关于Tk的一般性问题,请原谅我没有发布code。我写了一个小的Tcl / Tk GUI,它包含一个条目,几个checkbuttons,一个radiobutton和一个按钮小部件。当任何这些小部件发生变化时,我需要运行一个特定的proc来检查所有小部件的状态并执行某些操作。就像选中checkbutton或在条目小部件中键入某些内容一样。

我可以通过使用小部件特定选项来实现所需的行为,例如-commandcheckbutton的{​​{1}},radiobutton的{​​{1}}等等。我对此实现的问题是,这不是很透明和可读。

是否可以使用-validatecommand命令或其他内容来调用窗口小部件更改?

注意:我意识到我可以entry bindbind之类的内容,但我只想在实际更改小部件时触发脚本。

谢谢

1 个答案:

答案 0 :(得分:3)

使用-variable和-textvariable选项(后者用于条目,前者用于检查按钮和单选按钮)。让支持所有小部件的变量成为同一个数组的成员。然后在整个数组上使用trace来处理变量更新。

array set ::form {entry "" flag 0}
entry .entry -textvariable ::form(entry)
checkbutton .flag -variable ::form(flag)
proc handle_update {name1 name2 op} {
    # something changed
    # <your code here>
}
trace add variable ::form write handle_update