繁体   English   中英

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

[英]TCL/TK How do I pass multiple arguments to a button call back function?

我有这样的代码

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

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

  • 早期绑定 :如果您想稍后传递当前值(例如,如果您在循环中创建小部件),则需要使用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不会防止这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM