0

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

我填充第一个框:

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

这适用于开关的第一种情况,我在可以选择的第二个框中得到一个条目,但我没有设法用几个新值(行)填充该框。“第一个新值”和“第二个新值”最终成为框中的一个条目。以某种方式合乎逻辑,它是一个列表,但是我如何一次更新组合框的所有值?

4

1 回答 1

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值,如果您设置它,则设置当前值。

于 2013-09-30T16:23:59.403 回答