列表框在tk / tcl 2中

时间:2016-01-08 16:01:13

标签: listbox set tcl tk

#Variables:
set var1 123
set var2 456
set var3 789

#Widgets:
label .label1 -text ""
listbox .lstb1 -height 3 -width 20 -selectmode browse
.lstb1 insert 0 Var1 Var2 Var3

#Procedure
proc SelectionHappened {listbox label} {
set activeItem [$listbox get active]
$label configure -text $$activeItem
}

#Interface
bind .lstb1 <<ListboxSelect>> {SelectionHappened .lstb1 .label1}
grid .label1 .lstb1 -sticky news

如何获取所选变量的.label1值,而不是变量名?

ie:而不是“$ Var1”得到“123”;而不是“$ Var2”获得“456”;而不是“$ Var3”得到“789”

2 个答案:

答案 0 :(得分:1)

你需要改变这个:

"Home","Work","XYZ","YZX","JDMD",...

到此:

.lstb1 insert 0 Var1 Var2 Var3

和此:

.lstb1 insert 0 $var1 $var2 $var3

到此:

set activeItem [$listbox get active]

最后这个:

set activeItem [$listbox get [$listbox curselection]]

到此:

$label configure -text $$activeItem

(为什么$label configure -text $activeItem 不起作用?当您在列表框中选择一个项目时,$listbox get active会为您提供在您点击之前处于活动状态的项目。如果您选择两次相同的项目,$listbox get active将第二次指出该项目。)

回复评论时更新:

离开此行

$listbox get active

原样,并更改此行:

.lstb1 insert 0 Var1 Var2 Var3

set activeItem [$listbox get active]

set activeItem [lindex {123 456 789} [$listbox curselection]]

文档:labellindexlistboxset

答案 1 :(得分:0)

如何使用标签小部件&#39; -textvariable选项?

proc SelectionHappened {listbox label} {
    set varName [$listbox get [$listbox curselection]]
    $label configure -textvariable $varName
}