我正在尝试在tcl中创建一些按钮。根据单击的按钮,我想将不同的参数传递给一个过程。
set cord_y 25
foreach {x but_name arg1 arg2} {1 button-1 val1 val2 2 button-2 val3 val4 3 button-3 val4 val5 4 button-4 val6 val7 5 button-5 val8 val9} {
button $a.$x -text $but_name -command {print $arg1 $arg2}
place $a.$x -x 20 -y $cord_y -width 80 -height 25
set cord_y [expr $cord_y+35]
}
proc print {i j} {
puts "$i--$j"
}无论单击哪些按钮,输出始终是val8--val9。如何从每个按钮调用传递不同的参数。
谢谢!
发布于 2022-06-24 13:05:21
问题就在眼前
button $a.$x -text $but_name -command {print $arg1 $arg2}因为print命令包含在{}中,所以只有在运行命令时才会替换arg1和arg2的值。您想要的是在定义命令时替换它们。为了达到这个目的,你应该去做
button $a.$x -text $but_name -command [list print $arg1 $arg2](实际上,在这种情况下,您可以只使用-command "print $arg1 $arg2",但如果arg1或arg2包含空格或其他特殊字符,则会失败。)
https://stackoverflow.com/questions/72743801
复制相似问题