Frage

Die BWidget ComboBox Widget können Sie mit einem Wert in einem Eingabefeld füllen. Ich möchte nur bestimmte Zeichen in dem Feld erzwingen (z.B. nur [a-Z0-9]). Zu diesem Zweck würde Ich mag Tcl / Tk -validatecommand (oder -vcmd kurz) verwenden, wie Sie mit dem Standard 'Eintrag' Widget tun:

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}

Es scheint ComboBox nicht -validatecommand unterstützt. Was ist die beste Work-around?

War es hilfreich?

Lösung 2

Als etwas, das war möglich, aber ein wenig umständlich, ich den alten Stil ‚trace Variable‘ Funktion verwenden entschieden Werte in Combobox zu erzwingen.

Setzen Sie die folgende Anweisung nach dem ComboBox Aufruf:

trace variable myVar w forceAlphaNum

In anderen Ländern, müssen Sie die forceAlphaNum proc definieren:

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]
}

Andere Tipps

Wenn Sie eine BWidget verwenden möchten, können Sie versuchen, mit -modifycmd oder -postcommand.

Auf jeden Fall würde ich Ihnen vorschlagen, die ttk :: Combobox mit der -postcommand Option zu versuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top