0

私は2つのコンボボックスを持っています。ユーザーが最初のエントリから 1 つのエントリを選択した場合、2 番目のエントリを更新して、ユーザーが特定のもののみを選択できるようにする必要があります。

最初のボックスに入力します。

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 }

何か変更があった場合は、2 番目のボックスに再入力します。

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

これは、スイッチの最初のケースでは正常に機能します。選択できるボックス 2 に 1 つのエントリを取得しますが、ボックスにいくつかの新しい値 (行) を入力することができません。「最初の新しい値」と「2 番目の新しい値」は、ボックス内の 1 つのエントリになります。どういうわけか論理的に、それは1つのリストですが、コンボボックスのすべての値を一度に更新するにはどうすればよいですか?

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 に答える