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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top