我有这样的代码
proc press2 {v sbit} {
puts $v
puts $sbit
}
:
:
button .t.ok2 -text "OKI" -command "press2 $v $sbit"
Run Code Online (Sandbox Code Playgroud)
有了这个,wrong # args: should be "press2 v sbit"
如果我将其更改为 button .t.ok2 -text "OKI" -command {press2 $v $sbit}I get can't read "v": no such variable,我就会得到错误,最后我尝试button .t.ok2 -text "OKI" -command [press2 $v $sbit]了没有出现任何错误但也不起作用的方法。只是问有没有可用于 TCL/TK 的好的文档?通常的手册页和谷歌搜索对我没有多大帮助。我通过反复试验做很多事情。
将多个参数传递给过程很容易,但“正确”的方式取决于您想要什么:
早期绑定:如果您想稍后传递当前值(例如,如果您在循环中创建小部件),您需要使用list:
button .t.ok2 -text OKI -command [list press2 $v $sbit]
Run Code Online (Sandbox Code Playgroud)
list 创建一个无需任何进一步替换的命令*。
后期绑定:如果你想在这个命令执行时传递值,只需用括号括起来{}
button .t.ok2 -text OKI -command {press2 $v $sbit}
Run Code Online (Sandbox Code Playgroud)
当按下按钮时,变量v和sbit被替换。您只能访问全局变量(或命名空间中的变量,但不能访问局部变量)。
* Tk用特殊的东西bind替换%和跟随字符。这是使用字符串替换完成的,而不是 Tcl 替换,因此list不会对此进行防范。