我正在尝试运行一个过程,该过程接受一个名为ds_out的数组,根据复选框的状态将ds_out(0)和ds(1)的值更改为0或1,然后将其返回。然后,我想在过程之后输出值,但是看起来过程没有返回数组并在初始化数组中打印值。如果您在该过程中放置推子行,那么它将起作用。
我看过教程和示例,但我不理解它们。我想要基本示例的基础,但是找不到它们。
以下是我使用的代码:
global ds_out
array set ds_out {
0 0
1 0
}
proc kl15cb {} {
checkbutton .kl15_cb -width 10 -height 1 -text "check me" -variable kl15_cb -command {if {$kl15_cb} {
set ds_out(0) 0
set ds_out(1) 0
pack .kl15_cb
} else {
set ds_out(0) 1
set ds_out(1) 1
pack .kl15_cb
return [array get ds_out]
} } }
kl15cb
puts $ds_out(0)
puts $ds_out(1)
pack .kl15_cb
答案 0 :(得分:2)
没有冒犯,但是您的代码基于一些严重的误解。您不在这里处理调用堆栈,在这里代码可以将值从一个范围返回到调用范围。
-command
选项中的代码是面向事件的回调。它在执行过程时不执行,只是作为字符串传递给checkbutton。单击复选按钮后,回调将在全局范围内执行,并且没有任何值可返回。
此代码段可能会帮助您:
array set ds_out {
0 0
1 0
}
checkbutton .kl15_cb -width 10 -height 1 -text "check me" -variable kl15_cb -command {
set ds_out(0) $kl15_cb
set ds_out(1) $kl15_cb
}
pack .kl15_cb
如果运行该代码,然后运行array get ds_out
,则会得到0 0 1 0
。现在,单击复选框,然后再次调用array get ds_out
;现在您得到0 1 1 1
。