Bestätigen Sie die Eingabe mit der BWidget der ComboBox
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?
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.