문제

bwidget 콤보 박스 위젯을 사용하면 값으로 입구 필드를 채울 수 있습니다. 해당 필드의 특정 문자 만 시행하고 싶습니다 (예 : [A-Z0-9]). 그런 목적으로 TCL/TK를 사용하고 싶습니다. -ValidateCommand (또는 짧은 경우 -vcmd), 표준 '항목'위젯과 마찬가지로 :

proc ValidateMyEntry { value } {
    # Check if it's alphanum string

    if ![regexp {^[-a-zA-Z0-9]*$} $value] {
        return 0
    }
    return 1
}

entry .my_entry -width 20 -textvariable myVar -validate key -vcmd {ValidateMyEntry %P}

Combobox는 -validatecommand를 지원하지 않는 것 같습니다. 가장 좋은 작업은 무엇입니까?

도움이 되었습니까?

해결책 2

가능했지만 약간 번거로운 일로, 나는 구식 '트레이스 변수'함수를 사용하여 콤보 박스에서 값을 시행하기로 결정했습니다.

Combobox 호출 후 다음 진술을하십시오.

trace variable myVar w forceAlphaNum

다른 곳에서는 Forcealphanum Proc를 정의해야합니다.

proc forceAlphaNum { name el op } {
    if { $el == "" } {
        set newname $name
        set oldname ${name}_alphanum
    } else {
        set newname ${name}($el)
        set oldname ${name}_alphanum($el)
    }

    global $newname
    global $oldname

    if { ![info exist $oldname] } {
        set $oldname ""
    }    

    # Check if it's alphanum string
    if ![regexp {^[a-zA-Z0-9]*$} [set $newname]] {
        set $newname [set $oldname]
        bell; return
    }
    set $oldname [set $newname]
}

다른 팁

bwidget을 사용하려면 -modifycmd 또는 -postcommand로 시도 할 수 있습니다.

어쨌든 -postcommand 옵션으로 ttk :: combobox를 사용해보십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top