1

我有这样的代码

  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 的好的文档?通常的手册页和谷歌搜索对我没有多大帮助。我通过反复试验做了很多事情。

4

1 回答 1

5

将多个参数传递给一个过程很容易,但“正确”的方式取决于你想要什么:

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

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

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

  • Late Binding:如果您想在执行此命令时传递值,只需将其与{}

    button .t.ok2 -text OKI -command {press2 $v $sbit}
    

    按下按钮时,变量v和被替换。sbit您只能访问全局变量(或命名空间中的变量,但不能访问局部变量)。

* Tk 的bind替换%和后面的字符带有一些特殊的东西。这是使用字符串替换完成的,而不是 Tcl 替换,所以list不防备这一点。

于 2013-09-16T08:54:00.587 回答