使用返回的数组

问题描述 投票:1回答:1

我正在尝试运行一个带有一个名为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
tcl tk
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.