TCL / TK如何将多个参数传递给按钮回调函数?

时间:2013-09-16 05:36:01

标签: tcl tk

我有这样的代码

  proc press2 {v sbit} {
                puts $v
                puts $sbit
        }

                   :
                   :
button .t.ok2 -text "OKI" -command "press2 $v $sbit"

有了这个我收到错误wrong # args: should be "press2 v sbit" 如果我将其更改为button .t.ok2 -text "OKI" -command {press2 $v $sbit},我会can't read "v": no such variable,最后我尝试了button .t.ok2 -text "OKI" -command [press2 $v $sbit],它不会出现任何错误,但也无效。只是问一下TCL / TK是否有任何好的文档?通常的手册页和谷歌搜索对我没什么帮助。我通过反复试验做了很多。

1 个答案:

答案 0 :(得分:4)

将多个参数传递给过程很简单,但“正确”的方式取决于您的需求:

  • 早期绑定:如果您想稍后传递当前值(例如,如果您在循环中创建小部件),则需要使用list

    button .t.ok2 -text OKI -command [list press2 $v $sbit]
    

    list创建一个没有任何进一步替换的命令*。

  • 后期绑定:如果要在执行此命令时传递值,只需使用{}

    进行括号即可
    button .t.ok2 -text OKI -command {press2 $v $sbit}
    

    按下按钮时,变量vsbit将被取代。您只能访问全局变量(或命名空间中的变量,但不能访问本地变量)。

* Tk的bind替换%以及后续字符的特殊内容。这是使用字符串替换而不是Tcl替换来完成的,因此list无法防范这种情况。