我是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} {
}
干杯!
答案 0 :(得分:4)
您的示例代码有一些错误(*),并不完全清楚您想要做什么。您是要将组合框的当前值添加到下拉列表中,还是要从其他位置添加要添加的值?
这是一个将组合框的当前值添加到列表中的解决方案。它使用组合框,标签和按钮小部件的内置版本。无论你使用哪种组合框小部件都可能有类似的功能,但可能并不完全相同。
(*)Button,Label和ComboBox不是标准的小部件 - 你的意思是“按钮”,“标签”和“ttk :: combobox”还是你在使用一些自定义小部件?此外,你忘了使用网格来管理组合框和标签,你的procs期待参数,但你没有传递任何内容)。
此解决方案适用于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
}
}