使用返回的数组

时间:2018-08-16 10:51:39

标签: tcl tk

我正在尝试运行一个过程,该过程接受一个名为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

1 个答案:

答案 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