2

私は tcl/tk プログラミングが初めてです。コンボ ボックスの小さなコード スニペットを次に示します。コンボ ボックスの値を動的に追加および削除するにはどうすればよいですか?

set ff [ frame f]
set label [Label $ff.label -text "Name:" ]

set name [ComboBox $ff.name \
                 -editable yes \
                 -textvariable name]

set addButton [Button $ff.addButton -text "+" -width 1 -command {addNameToComboBox}]

set removeButton [Button $ff.removeButton -text "-" -width 1  -command removeNameFromComboBox}]    

grid $ff.addButton  -row 0 -column 2 -sticky w
grid $ff.removeButton  -row 0 -column 3 -sticky sw -padx 5

proc addNameToComboBox {name} {

}

proc removeNameFromComboBox {name} {

}

乾杯!

4

1 に答える 1

4

サンプルコードにはいくつかのバグ(*)があり、何をしたいのかが完全には明確ではありません。コンボボックスの現在の値をドロップダウンリストに追加しますか、それとも他の場所からの値を追加しますか?

これは、コンボボックスの現在の値をリストに追加するソリューションです。組み込みバージョンのコンボボックス、ラベル、ボタンウィジェットを使用します。使用しているコンボボックスウィジェットは、正確ではないかもしれませんが、おそらく同じように機能します。

(*)Button、Label、ComboBoxは標準のウィジェットではありません。「button」、「label」、「ttk :: combobox」を意味しますか、それともカスタムウィジェットを使用していますか。また、グリッドを使用してコンボボックスとラベルを管理するのを忘れており、プロシージャは引数を期待していますが、何も渡していない)。

このソリューションは、tcl /tk8.5および組み込みのttk::comboboxウィジェットで機能します。

package require Tk 8.5

set ff [frame .f]
set label [label $ff.label -text "Name:" ]
set name [ttk::combobox $ff.name -textvariable name]
set addButton [button $ff.addButton -text "+" -width 1 \
    -command [list addNameToComboBox $name]]
set removeButton [button $ff.removeButton -text "-" -width 1 \
    -command [list removeNameFromComboBox $name]]
grid $label $name
grid $ff.addButton -row 0 -column 2 -sticky w 
grid $ff.removeButton -row 0 -column 3 -sticky sw -padx 5
pack $ff -side top -fill both -expand true

proc addNameToComboBox {name} {
    set values [$name cget -values]
    set current_value [$name get]
    if {$current_value ni $values} {
        lappend values $current_value
        $name configure -values $values
    }
}

proc removeNameFromComboBox {name} {
    set values [$name cget -values]
    set current_value [$name get]
    if {$current_value in $values} {
        set i [lsearch -exact $values $current_value]
        set values [lreplace $values $i $i]
        $name configure -values $values
    }    
}
于 2009-08-24T14:34:14.207 に答える