我正在尝试运行一个带有一个名为ds_out的数组的过程,根据复选框的状态将ds_out(0)和ds(1)的值更改为0或1并返回它。我想在程序之后输出值,但看起来程序没有返回数组并在初始化数组中打印值。如果你在程序中有put行,它就可以工作。
我看过教程和示例,但我不理解它们。我想要基本的基本示例,但找不到它们。
以下是我使用过的代码:
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
没有冒犯,但你的代码依赖于一些严重的误解。您没有在这里处理调用堆栈,其中代码可以将值从一个范围返回到调用范围。
-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
。