如何保持列表框项目选中状态?

时间:2017-10-18 08:14:48

标签: listbox tcl tk

global SelectMode
set SelectMode mode1
set FunList {Func1 Func2 Func3}
listbox .lb -listvariable FunList
bind .lb <<ListboxSelect>> {puts [.lb curselection]}
ttk::combobox .com -values {mode1 mode2 mode3} -textvariable SelectMode
pack .lb
pack .com

当我第一次选择项目(在示例框中选择“Func2”)然后在组合框中选择模式时,我得到一个意外的空字符串输出,如下所示:

1
"" (unneeded)

如何保持列表框项目处于选中状态且不受组合框影响?感谢

2 个答案:

答案 0 :(得分:0)

.lb curselection命令利用窗口管理器焦点来了解所选内容。由于窗口管理器忙于另一个元素(在这种情况下为组合框),因此无法看到列表框中有选择。解决方案是编写一个程序来跟踪列表框选择。并在更改选择时更新变量。

global SelectMode
lb_selection = ""
set SelectMode mode1
set FunList {Func1 Func2 Func3}
listbox .lb -listvariable FunList
bind .lb <<ListboxSelect>> {ListSelectionChanged %W}
ttk::combobox .com -values {mode1 mode2 mode3} -textvariable SelectMode
pack .lb
pack .com

# Procedure bound to <<ListboxSelect>> virtual event.
proc ListSelectionChanged { listbox } {
    global lb_selection
    set lb_selection [$listbox curselection]
}

# Procedure to repeatedly print the selection status of the listbox
proc printLBSelection { } {
    global lb_selection
    puts $lb_selection
    after 2000 printLBSelection
}

答案 1 :(得分:0)

您可以将exportselection选项设置为false,以防止在其他窗口小部件选择时更改选择。

listbox .lb -listvariable FunList -exportselection false