Convalida della voce con ComboBox di BWidget
Domanda
Il widget BWidget ComboBox consente di compilare un campo di immissione con un valore. Vorrei imporre solo caratteri specifici in quel campo (ad es. Solo [a-z0-9]). A tal fine, vorrei utilizzare -validatecommand (o abbreviato -vcmd) di Tcl / Tk, proprio come si fa con il widget standard 'entry':
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}
Sembra che ComboBox non supporti -validatecommand. Qual è la soluzione migliore?
Soluzione 2
Come qualcosa che era possibile ma un po 'ingombrante, ho deciso di utilizzare la funzione' trace variabile 'vecchio stile per imporre i valori nella casella combinata.
Inserisci la seguente dichiarazione dopo la chiamata ComboBox:
trace variable myVar w forceAlphaNum
Altrove, devi definire 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]
}
Altri suggerimenti
Se vuoi usare un BWidget, puoi provare con -modifycmd o -postcommand.
In ogni caso, ti suggerirei di provare ttk :: combobox con l'opzione -postcommand.