2009-08-24 4 views
2

tcl/tk 프로그래밍을 처음 사용합니다. 콤보 상자에 작은 코드 스 니펫이 있습니다. 어떻게하면 동적으로 콤보 상자에 값을 추가하고 제거 할 수 있습니까?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

는 TK 많은 콤보 구현이 있습니다

이 솔루션은 TCL/TK 8.5과 내장 TTK :: 콤보 상자 위젯 작동합니다. 내장되어있는 것을 사용하고 있지 않지만 어떤 것을 사용하고 있는지 분명하지 않습니다. 사용중인 콤보 박스 구현을 알려주시겠습니까? –

답변

4

예제 코드에는 몇 가지 버그 (*)가 있으며 원하는 작업이 완전히 명확하지 않습니다. 콤보 상자의 현재 값을 드롭 다운 목록에 추가 하시겠습니까, 아니면 다른 곳에서 추가 할 값입니까?

다음은 콤보 상자의 현재 값을 목록에 추가하는 솔루션입니다. 그것은 combobox, 레이블 및 단추 위젯의 기본 제공 버전을 사용합니다. 어떤 콤보 상자 위젯이라도 정확히 비슷하게 작동 할 것입니다.

(*) Button, Label 및 ComboBox는 표준 위젯이 아닙니다. "button", "label"및 "ttk :: combobox"를 의미합니까, 아니면 사용자 정의 위젯을 사용하고 있습니까? 또한, 그리드를 사용하여 콤보 상자 및 레이블을 관리하는 것을 잊었으며, procs는 인수를 기대하고 있지만 당신은 어떤 것도 전달하지 않습니다.)

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 
    }  
} 
관련 문제