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)
如何保持列表框项目处于选中状态且不受组合框影响?感谢
答案 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