带有新列表的Tk组合框更新框

时间:2013-09-30 14:08:45

标签: combobox tk

我有两个组合框。如果用户从第一个条目中选择一个条目,则第二个条目应该更新,以便用户只能选择某些东西。

我填充第一个框:

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} ]
  }
 }
}

这适用于第一种情况下的交换机,我在第二个框中可以选择一个条目,但我无法通过几个新值(行)填充该框。 “第一个新值”和“第二个新值”最终成为框中的一个条目。逻辑某种程度上,这是一个列表,但我怎么能一次更新组合框的所有值?

1 个答案:

答案 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只包含当前值,如果设置它,则设置当前值。