jueves, 28 de mayo de 2020

TkInter - de marciano a humano - sección 13 - El Widget LabelFrame

 

El widget LabelFrame al igual que el widget Frame es un contenedor espacial, un área rectangular que puede contener otros widgets. Sin embargo, a diferencia del widget Frame, éste le permite mostrar una etiqueta como parte del borde alrededor del área.

Aquí hay un ejemplo de un widget LabelFrame que contiene dos widgets Button. Tenga en cuenta que la etiqueta "Important controls" interrumpe el borde. Este widget ilustra el relieve GROOVE predeterminado (consulte la Sección 5.6 y el anclaje (anchor) de etiqueta 'nw' predeterminado, que coloca la etiqueta en el lado izquierdo de la parte superior del marco.

Para crear un nuevo widget LabelFrame dentro de una ventana raíz o marco primario utilice lo siguiente:

w=tk.LabelFrame(parent, option, ...)

Este constructor devuelve el nuevo widget LabelFrame. Opciones:

Tabla 21. Opciones del widget LabelFrame

bg o background

El color de fondo que se mostrará dentro del widget, ver la Sección 5.3.

bd o borderwidth

Ancho del borde dibujado alrededor del perímetro del widget, ver sección sección 5.1. El valor predeterminado es 2 píxeles.

cursor

Selecciona el cursor que aparece cuando el mouse está sobre el widget, ver Sección 5.8.

fg o foreground

Color que se utilizará para el texto de la etiqueta.

height

La dimensión vertical del nuevo marco. Esto será ignorado a menos que también llame a .grid_propagate(0) en el marco, ver Sección 4.2.

highlightbackground

Color del foco resaltado cuando el widget no tiene foco.

highlightcolor

El color del foco resaltado cuando el widget tiene foco.

highlightthickness

Espesor del foco resaltado.

labelanchor

Use esta opción para especificar la posición de la etiqueta en el borde del widget.

La posición predeterminada es 'nw', que coloca la etiqueta en el extremo izquierdo del borde superior. Para las nueve posibles posiciones de etiqueta, consulte este diagrama:

labelwidget

En lugar de una etiqueta de texto, puede usar cualquier widget como etiqueta pasando ese widget como el valor de esta opción. Si proporciona ambos widget de etiqueta y las opciones de texto, la opción de texto se ignora.

padx

Use esta opción para agregar relleno adicional dentro de los lados izquierdo y derecho del marco del widget. El valor está en píxeles.

pady

Use esta opción para agregar relleno adicional dentro de la parte superior e inferior del marco del widget. El valor está en píxeles.

relief

Esta opción controla la apariencia del borde alrededor del exterior del widget. El estilo predeterminado es tk.GROOVE, para otros valores, consulte Sección 5.6.

takefocus

Normalmente, el widget no recibirá foco, suministrar un valor verdadero a esto opción para hacer que el widget forme parte de la secuencia transversal del foco. Para más información, consulte la Sección 53.

text

Texto de la etiqueta.

widht

La dimensión horizontal del nuevo marco. Esto será ignorado a menos que también llame a .grid_propagate(0) en el marco, ver Sección 4.2.


Hasta el próximo jueves, salud y saludos!
Mauricio José Tobares

jueves, 21 de mayo de 2020

TkInter - de marciano a humano - sección 12 - El Widget de etiqueta Label

 

Los widgets de etiquetas pueden mostrar una o más líneas de texto en el mismo estilo, o un mapa de bits o una imagen. Para crear un widget de etiqueta en una ventana raíz o marco primario:

w=tk.Label(parent, option, ...)

El constructor devuelve el nuevo widget de etiqueta. Las opciones incluyen:

Tabla 20. Opciones de widget de etiqueta

activebackground

Color de fondo que se mostrará cuando el mouse esté sobre el widget.

activeforeground

Color de primer plano que se mostrará cuando el mouse esté sobre el widget.

anchor

Esta opción controla dónde se coloca el texto si el widget tiene más espacio de lo que el texto necesita. El valor predeterminado es anchor=tk.CENTER, que se centra el texto en el espacio disponible. Para otros valores, consulte la Sección 5.5. Por ejemplo, si usa anchor=tk.NW, el texto sería colocado en la esquina superior izquierda del espacio disponible.

bg o background

El color de fondo del área de la etiqueta. Consulte la Sección 5.3.

bitmap

Establezca esta opción igual a un mapa de bits o un objeto de imagen y la etiqueta mostrará ese gráfico Consulte la Sección 5.7 y la Sección 5.9.

bd o borderwidth

Ancho del borde alrededor de la etiqueta, consulte la Sección 5.1. El valor predeterminado es 2 píxeles.

compound

Si desea que el widget Etiqueta muestre texto y un gráfico (ya sea un mapa de bits o una imagen), la opción compound especifica la orientación relativa del gráfico en relación con el texto. Los valores pueden ser tk.LEFT, tk.RIGHT, tk.CENTER, tk.BOTTOM o tk.TOP. Por ejemplo, si especificas compound=BOTTOM, el gráfico se mostrará debajo del texto.

cursor

Cursor que aparece cuando el mouse está sobre esta etiqueta. Ver la Sección 5.8.

disabledforeground

El color de primer plano que se mostrará cuando el estado del widget sea tk.DISABLED.

font

Si está mostrando texto en esta etiqueta con el texto o la variable de texto opción, la opción de fuente especifica en qué fuente se mostrará ese texto. Consulte la Sección 5.4.

fg o foreground

Si está mostrando texto o un mapa de bits en esta etiqueta, esta opción especifica el color del texto Si está mostrando un mapa de bits, este es el color que aparecer en la posición de 1 bit en el mapa de bits. Consulte la Sección 5.3.

height

Altura de la etiqueta en líneas (¡no píxeles!). Si esta opción no está configurada, la etiqueta será redimensionada para ajustarse a su contenido.

highlightbackground

Color del foco resaltado cuando el widget no tiene el foco.

highlightcolor

El color del foco resaltado cuando el widget tiene el foco.

highlightthickness

Espesor del foco resaltado.

image

Para mostrar una imagen estática en el widget de etiqueta, establezca esta opción en una imagen objeto. Consulte la Sección 5.9.

justify

Especifica cómo se alinearán varias líneas de texto con respecto a cada una, tk.LEFT para justificar a la izquierda, tk.CENTER para centrado (el valor predeterminado) o tk.RIGHT para justificado a la derecha.

padx

Espacio adicional agregado a la izquierda y derecha del texto dentro del widget. El valor predeterminado es 1.

pady

Espacio adicional agregado arriba y debajo del texto dentro del widget. El valor predeterminado es 1.

relief

Especifica la apariencia de un borde decorativo alrededor de la etiqueta. El valor por defecto es tk.FLAT, para otros valores, consulte la Sección 5.6.

state

Por defecto, un widget de entrada está en el estado tk.NORMAL. Establezca esta opción en tk.DISABLED para que no responda a los eventos del mouse. El estado será tk.ACTIVE cuando el mouse está sobre el widget.

takefocus

Normalmente, el foco no se desplaza por los widgets Label, ver la Sección 53. Si desea que el foco pueda visitar este widget debe establecer takefocus=1.

text

Para mostrar una o más líneas de texto en un widget de etiqueta, establezca esta opción en cadena que contiene el texto. Las nuevas líneas internas '\n' forzarán un salto de línea.

textvariable

Para incluir el texto que se muestra en un widget de etiqueta en una variable de control de clase StringVar, establezca esta opción en esa variable. Consulte la Sección 52.

underline

Puede mostrar un subrayado ( _ ) por debajo del texto, contando desde 0, estableciendo esta opción en n. El valor predeterminado es underline=-1, que significa que no hay subrayado.

width

Ancho de la etiqueta en caracteres (¡no en píxeles!). Si esta opción no está configurada, la etiqueta será dimensionado para ajustarse a su contenido.

wraplength

Puede limitar el número de caracteres en cada línea configurando esta opción al número deseado El valor predeterminado es wraplength=0, significa que las líneas se romperán solo en líneas nuevas.

No existen métodos especiales para los widgets de etiquetas que no sean los comunes (consulte la Sección 26).

Hasta el próximo jueves, salud y saludos!
Mauricio José Tobares 

jueves, 14 de mayo de 2020

TkInter - de marciano a humano - sección 11 - El Widget Frame

 

Un marco (Frame) es básicamente solo un contenedor para otros widgets.

La ventana raíz de su aplicación es básicamente un marco.

Cada cuadro tiene su propio diseño en la aplicación, por lo que el mallado de widgets dentro de cada trama funciona de forma independiente.

Los widgets de marco son una herramienta valiosa para hacer que su aplicación sea modular. Puede agrupar un conjunto de widgets relacionados en un widget compuesto colocándolos en un marco. Mejor aún, puedes declarar una nueva clase que hereda de Frame y le agrega su propia interfaz. Esta es una buena manera de ocultar los detalles de las interacciones dentro de un grupo de widgets relacionados del mundo exterior.

Para crear un nuevo widget de marco en una ventana raíz o marco llamado padre (parent):

w=Frame(parent, option, ...)

El constructor devuelve el nuevo widget Frame. Opciones:

Tabla 19. Opciones del widget Frame

bg o background

El color de fondo. Consulte la Sección 5.3.

bd o borderwidth

Ancho del borde. El valor predeterminado es 0 (sin borde). Consulte la Sección 5.1.

cursor

El cursor utilizado cuando el mouse está dentro del widget, ver Sección 5.8.

height

La dimensión vertical del nuevo Frame. Esto será ignorado a menos que también se llame a .grid_propagate(0) en el Frame, consulte la Sección 4.2.

highlightbackground

Color del foco resaltado cuando el Frame no tiene foco. Ver sección 53.

higlightcolor

Color que se muestra en el foco resaltado cuando el Frame tiene el foco.

highlightthickness

Espesor del foco resaltado.

padx

Normalmente, un Frame se ajusta perfectamente a su contenido. Para agregar N píxeles de espacio horizontal dentro del Frame, configure padx=N.

pady

Se usa para agregar espacio vertical dentro de un Frame. Es el mismo caso que padx.

relief

El relieve predeterminado es tk.FLAT, lo que significa que el Frame se combinará adentro con sus alrededores. Para poner un borde alrededor de un marco, establezca su borde ancho a un valor positivo y establezca su relieve en uno de los tipos de relieve estándar, consulte la Sección 5.6.

takefocus

Normalmente, los widgets Frame no son visitados por el foco de entrada (ver Sección 53). Sin embargo, puede establecer takefocus=1 si desea que el Frame reciba entrada de teclado. Para manejar dicha entrada, necesitará crear enlaces para eventos de teclado, consulte la Sección 54.

width

La dimensión horizontal del nuevo Frame. Consulte la Sección 5.1. Este valor se ignorará a menos que también se llame a .grid_propagate(0) en el Frame, consulte la Sección 4.2.


Hasta el próximo jueves, salud y saludos!
Mauricio José Tobares 

jueves, 7 de mayo de 2020

TkInter - de marciano a humano - sección 10 - El Widget Entry (entrada)

El propósito de un widget de entrada es permitir que el usuario vea y modifique una sola línea de texto.

- Si desea mostrar varias líneas de texto que se pueden editar, consulte la Sección 24.

Si desea mostrar una o más líneas de texto que el usuario no puede modificar, consulte la Sección 12.

Algunas definiciones:

La selección es una región resaltada del texto dentro del widget Entry, si hay una. Por lo general, la selección la realiza el usuario con el mouse y el texto seleccionado se copia en el portapapeles del sistema. Sin embargo, Tkinter le permite controlar si el texto seleccionado se copia o no en el portapapeles. También puede seleccionar texto en una entrada bajo el control del programa.

El cursor de inserción muestra dónde se insertará el nuevo texto. Solo se muestra cuando el usuario hace clic con el mouse en algún lugar del widget. Suele aparecer como una línea vertical parpadeante dentro del widget. Puede personalizar su apariencia de varias maneras.

Las posiciones dentro del texto visualizado del widget se dan como un índice. Hay varias formas de especificar un índice:

    - Como índices normales de Python, comenzando desde 0.

    - La constante tk.END se refiere a la posición después del texto existente.

    - La constante tk.INSERT se refiere a la posición actual del cursor de inserción.

    - La constante tk.ANCHOR se refiere al primer carácter de la selección, si hay una selección.

    - Es posible que deba averiguar qué posición del caracter en el widget corresponde a una posición dada del mouse. Para simplificar ese proceso, puede usar como índice una cadena de la forma '@n', donde n es la distancia horizontal en píxeles entre el borde izquierdo del widget Entry y el mouse. Tal índice especificará el carácter en esa posición horizontal del mouse.

Para crear un nuevo widget de entrada en una ventana raíz o marco llamado padre:

w=tk.Entry(parent, option, ...)

Este constructor devuelve el nuevo widget de entrada. Las opciones incluyen:

Tabla 17. Opciones de widget de entrada

bg o bakground

El color de fondo dentro del área de entrada. El valor predeterminado es un gris claro.

bd o borderwidth

El ancho del borde alrededor del área de entrada, ver Sección 5.1. El valor predeterminado es dos píxeles.

cursor

El cursor utilizado cuando el mouse está dentro del widget de entrada, ver Sección 5.8.

disabledbackground

El color de fondo que se mostrará cuando el widget esté en tk.DISABLED. Para conocer los valores de las opciones, consulte bg.

disabledforeground

El color de primer plano que se mostrará cuando el widget esté en tk.DISABLED. Para conocer los valores de las opciones, consulte fg.

exportselection

De manera predeterminada, si selecciona texto dentro de un widget Entry, es automáticamente exportado al portapapeles. Para evitar esta exportación, use exportselection=0.

fg o foreground

El color utilizado para representar el texto. El valor predeterminado es negro.

font

La fuente utilizada para el texto ingresado en el widget por el usuario. Ver la Sección 5.4.

highlightbackground

Color del foco resaltado cuando el widget no tiene foco. Ver sección 53.

highlightcolor

Color que se muestra en el foco resaltado cuando el widget tiene el foco.

highlightthickness

Espesor del foco resaltado.

insertbackground

Por defecto, el cursor de inserción (que muestra el punto dentro del texto donde se insertará una nueva entrada de teclado) es negra. Para obtener un color diferente del cursor de inserción, establezca insertbackground en cualquier color, Ver sección 5.3.

insertborderwidth

Por defecto, el cursor de inserción es un simple rectángulo. Puedes obtener el cursor con efecto de relieve con tk.RAISED (consulte la Sección 5.6) configurando insertborderwidth a la dimensión del borde 3-d. Si lo hace, asegúrese de que la opción de ancho de inserción sea al menos dos veces ese valor.

insertofftime

Por defecto, el cursor de inserción parpadea. Puede establecer insertofftime en un valor en milisegundos para especificar cuánto tiempo pasa el cursor de inserción apagado. El valor predeterminado es 300ms. Si usa insertofftime=0, el cursor de inserción no Parpadeo en absoluto.

insertontime

Similar a insertofftime, esta opción especifica cuánto tiempo el cursor gasta por parpadeo. El valor predeterminado es 600 (milisegundos).

insertwidth

Por defecto, el cursor de inserción tiene 2 píxeles de ancho. Puede ajustar esto configurando insertwidth a cualquier dimensión.

justify

Esta opción controla cómo se justifica el texto cuando el texto no llena el ancho del widget. El valor puede ser tk.LEFT (predeterminado), tk.CENTER o tk.RIGHT.

readonlybackground

El color de fondo que se mostrará cuando la opción state del widget sea 'readonly'.

relief

Selecciona efectos de sombreado tridimensionales alrededor de la entrada de texto. Ver sección 5.6. El valor predeterminado es relief=tk.SUNKEN.

selectbackground

El color de fondo que se usará para mostrar el texto seleccionado. Ver la Sección 5.3.

selectborderwidth

El ancho del borde para usar alrededor del texto seleccionado. El valor predeterminado es un píxel.

selectforeground

El color de primer plano (texto) del texto seleccionado.

show

Normalmente, los caracteres que escribe el usuario aparecen en la entrada. Para hacer una entrada ’password’ que hace eco de cada carácter como un asterisco, establezca show='*'.

state

Use esta opción para deshabilitar el widget Entry para que el usuario no pueda escribir nada allí. Use state=tk.DISABLED para deshabilitar el widget, state=tk.NORMAL para permitir la entrada del usuario nuevamente. Tu programa también puede ver si el cursor está actualmente sobre el widget al interrogar esto opción, tendrá el valor tk.ACTIVE cuando el mouse esté sobre él, pero el contenido del widget todavía se puede seleccionar o copiar. También puede establecer esta opción en 'disabled', que es como tk.DISABLED.

takefocus

Por defecto, el foco se desplazará a través de widgets del entrada. Establezca esta opción en 0 para saca el widget de la secuencia. Vea la Sección 53.

textvariable

Para poder recuperar el texto actual de su widget de entrada, debes establecer esta opción en una instancia de la clase StringVar, ver la Sección 52. Puedes recuperar el texto usando v.get(), o configúrelo usando v.set(), donde v es el asociado al control de variables.

validate

Puede usar esta opción para configurar el widget para que se verifique su contenido por una función de validación en ciertos momentos. Consulte la Sección 10.2.

validatecommand

Una devolución de llamada que valida el texto del widget. Consulte la Sección 10.2.

width

El tamaño de la entrada en caracteres. El valor predeterminado es 20. Para las fuentes proporcionales, la longitud física del widget se basará en el ancho promedio de un carácter multiplicado por el valor de la opción de ancho.

xscrollcommand

Si espera que el usuario ingresen más texto del que puede entrar en el tamaño en pantalla del propio widget, puede vincular su widget de entrada a una barra de desplazamiento. Establezca estas opciones con el método .set de la barra de desplazamiento. Consulte la Sección 10.1.

Los métodos de entrada de objetos incluyen:

.delete(first, last=None): Borra caracteres de widget, empezando por el de índice de first, hasta (pero no incluyendo) el carácter en la posición last. Si se omite el segundo argumento, solo se elimina el carácter único en la posición first.

.get(): Devuelve el texto actual de la entrada como una cadena.

.icursor(index): Establezca el cursor de inserción justo antes del carácter en el índice dado.

.index(index): Cambie el contenido de la entrada para que el carácter en el índice dado sea ​​el carácter visible más a la izquierda. No tiene ningún efecto si el texto se ajusta completamente dentro de la entrada.

.insert(index, s): Inserta una cadena s antes del carácter en el índice dado.

.scan_dragto(x): Vea el método scan_mark.

.scan_mark(x): Use esta opción para configurar un escaneo rápido del contenido del widget Entry que tiene una barra de desplazamiento que admite el desplazamiento horizontal. Para implementar esta función, vincule el evento de botones del mouse a un controlador que llame a scan_mark(x), donde x es la posición x actual del mouse. Luego, vincule el evento <Motion> a un controlador que llame a scan_dragto(x), donde x es la posición x actual del mouse. El método scan_dragto desplaza el contenido del widget Entry continuamente a una velocidad proporcional a la distancia horizontal entre la posición en el momento de la llamada scan_mark y la posición actual.

.select_adjust(index): Este método se utiliza para asegurarse de que la selección incluya el carácter en el índice especificado. Si la selección ya incluye ese caracter, no pasa nada. De lo contrario, la selección se expande desde su posición actual (si corresponde) para incluir el índice de posición.

.select_clear(): Borra la selección. Si actualmente no hay una selección, no tiene ningún efecto.

.select_from(index): Establece la posición del índice tk.ANCHOR en el carácter seleccionado por el índice y selecciona ese carácter.

.select_present(): Si hay una selección, devuelve verdadero, de lo contrario devuelve falso.

.select_range(star, end): Establece la selección bajo el control del programa. Selecciona el texto que comienza en el índice inicial (star), hasta el carácter final (end), pero sin incluirlo. La posición inicial debe ser anterior a la posición final. Para seleccionar todo el texto en un widget de entrada use e.select_range(0, tk.END).

.select_to(index): Selecciona todo el texto desde la posición tk.ANCHOR hasta (pero sin incluir) el carácter en el índice dado.

.xview(index): Igual que .xview(). Este método es útil para vincular el widget Entry a una barra de desplazamiento horizontal. Consulte la Sección 10.1.

.xview_moveto(f): Coloca el texto en la entrada de modo que el carácter en la posición f (relativo a todo el texto) se coloque en el borde izquierdo de la ventana. El argumento f debe estar en el rango [0, 1], donde 0 significa el extremo izquierdo del texto y 1 el extremo derecho.

.xview_scroll(number, what): Se usa para desplazar la entrada horizontalmente. El argumento what debe ser tk.UNITS, para desplazarse por el ancho de los caracteres, o tk.PAGES, para desplazarse por fragmentos del tamaño del widget de entrada. El número es positivo para desplazarse de izquierda a derecha, negativo para desplazarse de derecha a izquierda. Por ejemplo, para un widget de entrada e, e.xview_scroll(-1, tk.PAGES) movería el texto una "página" a la derecha, y e.xview_scroll(4, tk.UNITS) movería el texto cuatro caracteres a la izquierda.

10.1 Desplazamiento en widget Entry

Hacer que un widget de entrada se pueda desplazar requiere un pequeño código adicional de su parte para adaptar la devolución de llamada del widget de barra de desplazamiento a los métodos disponibles en el widget de entrada. Aquí hay algunos fragmentos de código que ilustran la configuración. Primero, la creación y vinculación de los widgets Entry y Scrollbar:

self.entry=tk.Entry(self, width=10)

self.entry.grid(row=0, sticky=tk.E+tk.W)

self.entryScroll=tk.Scrollbar(self, orient=tk.HORIZONTAL, command=self.__scrollHandler)

self.entryScroll.grid(row=1, sticky=tk.E+tk.W)

self.entry['xscrollcommand']=self.entryScroll.set

Aquí está la función del adaptador mencionada anteriormente:

def __scrollHandler(self, *L):

    op, howMany=L[0], L[1]

    if op=='scroll':

        units=L[2]

        self.entry.xview_scroll(howMany, units)

    elif op=='moveto':

        self.entry.xview_moveto(howMany)

10.2 Agregar validación a un widget Entry

En algunas aplicaciones, será conveniente verificar el contenido de un widget de entrada para asegurarse de que sean válidos de acuerdo con alguna regla que su aplicación debe aplicar, para ello, se deberá definir lo que es válido escribiendo una función de devolución de llamada que verifica el contenido y señala si es válido o no.

Aquí está el procedimiento para configurar la validación en un widget.

 - Escriba una función de devolución de llamada que verifique el texto en la entrada y devuelva Verdadero si el texto es válido, o Falso si no lo es. Si la devolución de llamada devuelve False, el intento del usuario de editar el texto será rechazado y el texto no se modificará.

 - Registre la función de devolución de llamada. En este paso, producirá un contenedor Tcl alrededor de una función de Python. Suponga que su función de devolución de llamada es una función llamada isOkay, para registrar esta función, use el método de widget universal register(isOkay). Este método devuelve una cadena de caracteres que Tkinter puede usar para llamar a su función.

 - Cuando llame al constructor Entry, use la opción validatecommand en el constructor Entry para especificar su devolución de llamada, y use la opción validate para especificar cuándo se llamará la devolución de llamada para validar el texto en la devolución de llamada.

Aquí están los valores de la opción de validación y lo que significan:

'focus': Valide cada vez que el widget Entry obtenga o pierda el foco (consulte la Sección 53).

'focusin': Valide siempre que el widget tenga el foco.

'focusout': Valide siempre que el widget pierda el foco.

'key': Valide siempre que cualquier pulsación de tecla cambie el contenido del widget.

'all': Validar en todas las situaciones anteriores.

'none': Desactiva la validación. Este es el valor de opción predeterminado. Tenga en cuenta que esta es la cadena 'none', no el valor especial de Python None.

El valor de la opción validatecommand depende de los argumentos que desea que reciba su devolución de llamada.

Quizás lo único que necesita saber la devolución de llamada es qué texto aparece actualmente en la entrada. Si ese es el caso, puede usar el método .get() de la variable de texto asociada con el widget para recuperar ese texto. En este caso, todo lo que necesita es la opción validatecommand=f, donde f es el nombre de su función de devolución de llamada.

Tkinter también puede proporcionar una serie de elementos de información para la devolución de llamada. Si desea utilizar algunos de estos elementos, cuando llame al constructor Entry, use la opción validatecommand=(f, s1, s2, ...), donde f es el nombre de su función de devolución de llamada, y cada s adicional es un código de sustitución. Para cada código de sustitución que proporcione, la devolución de llamada recibirá un argumento posicional que contiene el valor apropiado.

Aquí están los códigos de sustitución:

Tabla 18. Códigos de sustitución de devolución de llamada

'%d'

Código de acción: 0 para un intento de eliminación, 1 para un intento de inserción o -1 si la devolución de llamada se solicitó para focusin, focusout o un cambio en la variable de texto.

'%i'

Cuando el usuario intenta insertar o eliminar texto, este argumento será el índice del comienzo de la inserción o eliminación. Si la devolución de llamada se debió a focusin, focusout o un cambio en la variable de texto, en ese caso, el argumento será -1.

'%P'

El valor que tendrá el texto si se permite el cambio.

'%s'

El texto en la entrada antes del cambio.

'%S'

Si la llamada se debió a una inserción o eliminación, este argumento será el texto que se inserta o elimina.

'%v'

El valor actual de la opción de validación del widget.

'%V'

El motivo de esta devolución de llamada: uno de 'focusin', 'focusout', 'key' o 'force' si se cambió la variable de texto.

'%W'

El nombre del widget.

Aquí hay un pequeño ejemplo. Suponga que desea que su devolución de llamada reciba el '%d' para averiguar por qué se llamó, '%i' para averiguar dónde ocurriría la inserción o eliminación, y '%S' para averiguar qué se debe insertar o eliminar. Su método podría verse así:

def isOkay (self, why, where, what):

...

Luego, utiliza el método universal .register() para ajustar esta función. Suponemos que self es un widget.

okayCommand=self.register(isOkay)

Para configurar esta devolución de llamada, usaría estas dos opciones en el constructor Entry:

self.w=Entry(self, validate='all', validatecommand=(okayCommand, '% d', '% i', '% S'), ...)

Suponga que la entrada actualmente contiene la cadena 'abcdefg', y el usuario selecciona 'cde' y luego presiona Retroceso. Esto daría como resultado una llamada isOkay(0, 2, 'cde'):0 para eliminación, 2 para la posición anterior a 'c' y 'cde' para que se elimine la cadena. Si isOkay() devuelve True, el nuevo texto será 'abfg', si devuelve False, el texto no cambiará.

El widget Entry también admite una opción de comando no válido que especifica una función de devolución de llamada que se llama cada vez que el comando validate devuelve False. Este comando puede modificar el texto en el widget utilizando el método .set() en la variable de texto asociada al widget . Configurar esta opción funciona igual que configurar el comando validar . Debe usar el método .register() para ajustar su función Python. Este método devuelve el nombre de la función envuelta como una cadena. Luego pasará como el valor de la opción de comando no válido esa cadena, o como el primer elemento de una tupla que contiene códigos de sustitución.


Hasta el próximo jueves, salud y saludos!
Mauricio José Tobares 

TkInter - de marciano a humano - sección 13 - El Widget LabelFrame

  13 El widget LabelFrame El widget LabelFrame al igual que el widget Frame es un contenedor espacial, un área rectangular que puede...