Tcl 如何动态填充TK combobox的值?

Tcl 如何动态填充TK combobox的值?,tcl,tk,Tcl,Tk,我是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 "

我是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} {

}

干杯

您的示例代码有一些bug(*),您想做什么还不完全清楚。您是要将组合框的当前值添加到下拉列表中,还是要添加的值来自其他地方

下面是一个将组合框的当前值添加到列表中的解决方案。它使用组合框、标签和按钮小部件的内置版本。无论您使用的是什么组合框小部件,其工作原理都可能类似,但可能并不完全相同

(*)按钮、标签和组合框不是标准的小部件——您是指“按钮”、“标签”和“ttk::组合框”还是使用一些自定义小部件?。此外,您忘记使用网格来管理组合框和标签,并且您的进程需要参数,但您没有传入任何参数)

此解决方案与tcl/tk 8.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
    }    
}

tk有许多组合框实现。您没有使用内置的,但不清楚您使用的是哪一个。您能告诉我们您使用的是哪个combobox实现吗?