Pregunta

El widget BWidget ComboBox le permite completar un campo de entrada con un valor. Me gustaría aplicar solo caracteres específicos en ese campo (por ejemplo, solo [a-z0-9]). Para ese propósito, me gustaría usar el -validatecommand de Tcl / Tk (o -vcmd para abreviar), tal como lo hace con el widget estándar de "entrada":

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}

Parece que ComboBox no admite -validatecommand. ¿Cuál es la mejor solución?

¿Fue útil?

Solución 2

Como algo que era posible pero un poco engorroso, decidí usar la antigua función de 'variable de rastreo' para imponer valores en el cuadro combinado.

Ponga la siguiente declaración después de la llamada de ComboBox:

trace variable myVar w forceAlphaNum

En otro lugar, debe definir el proceso forceAlphaNum:

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

Otros consejos

Si desea utilizar un BWidget, puede intentar con -modifycmd o -postcommand.

De todos modos, te sugiero que pruebes el ttk :: combobox con la opción -postcommand.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top