我有这样的代码
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是否有任何好的文档?通常的手册页和谷歌搜索对我没什么帮助。我通过反复试验做了很多。
答案 0 :(得分:4)
将多个参数传递给过程很简单,但“正确”的方式取决于您的需求:
早期绑定:如果您想稍后传递当前值(例如,如果您在循环中创建小部件),则需要使用list
:
button .t.ok2 -text OKI -command [list press2 $v $sbit]
list
创建一个没有任何进一步替换的命令*。
后期绑定:如果要在执行此命令时传递值,只需使用{}
button .t.ok2 -text OKI -command {press2 $v $sbit}
按下按钮时,变量v
和sbit
将被取代。您只能访问全局变量(或命名空间中的变量,但不能访问本地变量)。
* Tk的bind
替换%
以及后续字符的特殊内容。这是使用字符串替换而不是Tcl替换来完成的,因此list
无法防范这种情况。