我有两个组合框。如果用户从第一个条目中选择一个条目,则第二个条目应该更新,以便用户只能选择某些东西。
我填充第一个框:
ttk::combobox .dsm.nb.f1.entr_Box1 -textvariable GUI_BoxOne -values [list {first entr} {second entr}] -state readonly
然后我使用bind来捕获任何更改:
bind .dsm.nb.f1.entr_Box1 <<ComboboxSelected>> { ::UpdateCombobox }
如果有任何变化,我会重新填充第二个框:
proc ::UpdateCombobox { } {
switch $::GUI_BoxOne {
{first entr} {
set ::GUI_BoxTwo {one new value}
}
{second entr} {
set ::GUI_BoxTwo [list {first new value} {second new value} ]
}
}
}
这适用于第一种情况下的交换机,我在第二个框中可以选择一个条目,但我无法通过几个新值(行)填充该框。 “第一个新值”和“第二个新值”最终成为框中的一个条目。逻辑某种程度上,这是一个列表,但我怎么能一次更新组合框的所有值?
答案 0 :(得分:1)
使用.dsm.nb.f1.entr_Box2 configure -values
:
proc ::UpdateCombobox {} {
.dsm.nb.f1.entr_Box2 configure -values [dict get {
{first entr} {
{one new value}
}
{second entr} {
{first new value}
{second new value}
}
} $::GUI_BoxOne]
}
当然你也可以使用switch,但我通常更喜欢dicts。
-textvariable
只包含当前值,如果设置它,则设置当前值。