E
xiste un mecanismo que permite asociar determinados eventos (que se producirán durante la ejecución del programa) con los comandos que se desea que se ejecuten en el momento de producirse aquellos. Es decir, si se quiere que al pulsar el botón del ratón sobre una determinada frame, esta cambie de color al rojo, deberá asociarse el evento "pulsar con el botón 1 del ratón", que se nombra <Button-1>, a un comando (por ejemplo "Cambia_Color_a_Rojo").El comando bind
El comando bind va a permitir asociar un evento al comando que se desea que se ejecute. Los comandos Tcl, asociados a eventos, soportan una sintaxis especial para los argumentos que reciben. Estos argumentos, que ya están predefinidos, empiezan con un "%", y continuan con un sólo carácter. Así, por ejemplo, si a un procedimiento asociado a un avento se le pasan los argumentos %x y %y, el procedimiento entenderá que se le están pasando las coordenadas del punto donde se ha pinchado con el ratón. Todos los argumentos se presentarán más adelante en un tabla.
Es importante resaltar que cada widget tiene una serie de binds asociados por defecto, a los que se les unirán aquellos definidos por el usuario.
Sintaxis de los eventos
El comando bind usa la siguiente sintaxis para describir los eventos:
La parte fundamental de la descripción es el tipo, por ejemplo, Button o Motion. El detalle es usado en los eventos para identificar el boton o la tecla, por ejemplo, Key-a o Button-1. Un modificador es otro botón u otra tecla que debe ser pulsada al mismo tiempo para que el evento ocurra; por ejemplo, Control-Shift-x. Los caracteres "<" y ">" son usados para delimitar la descripción del evento.
la siguiente tabla muestra los eventos más habituales en Tcl.
|
ButtonPres, Button, B |
Se ha pulsado el botón del ratón. |
|
Buttonrelease |
Se ha dejado de pulsar el botón del ratón. |
|
Configure |
El widget ha cambiado de tamaño, posición, etc. |
|
Destroy |
El widget ha sido destruido. |
|
Enter |
El ratón ha entrado en el widget. |
|
FocusIn |
El widget ha tomado el foco. |
|
FocusOut |
El widget ha perdido el foco. |
|
KeyPress, Key |
Se ha pulsado una tecla. |
|
KeyRelease |
Se ha soltado la tecla pulsada. |
|
Motion |
El ratón se mueve sobre el widget. |
|
Leave |
El ratón abandona el widget. |
|
Map |
La ventana ha sido desplegada. |
|
Unmap |
La ventana ha sido iconificada. |
Eventos del teclado
El evento KeyPress puede abreviarse como Key; y a su vez, Key puede abreviarse en la tecla que debe ser pulsada. Por ejemplo, son equivalentes:
<KeyPress-a> <Key-a> <a> a
También existen unas teclas ya definidas, tales como:
Return, Escape, BackSpace, Tab, Up, Down, Left, Right , etc.
Un ejemplo sería:
bind $w <KeyPress-b> {puts "Esto es una prueba"}
En este ejemplo, cada vez que se pulsase la tecla b, escribiría "Esto es una prueba.".
Eventos del ratón
Se distingue entre ButtonPress (o Button) y ButtonRelease. Al igual que pasaba con las teclas, Button puede ser abreviado a B, y éste a su número de botón. Así, son equivalentes:
<ButtonPress-1> <Button-1> <B-1> <1>
Los botones del ratón son numerados de la siguientes forma:
<Button-1> , es el botón izquierdo<Button-2> , es el botón central<Button-3> , es el botón derecho
El movimiento del ratón puede ser seguido con los eventos Enter, Leave y Motion. Enter y Leave se disparan al entrar el ratón dentro del widget o al salir de él respectivamente; el evento Motion es generado cuando el ratón se mueve sobre el widget.
Otros eventos
Los eventos <Map> y <Unmap> son generados cuando una ventana es abierta o cerrada, o cuando un widget es empaquetado o desempaquetado por el geometry manager.
El evento <Configure> es generado cuando la ventana cambia de tamaño. Este evento puede ser causado por un redimensionado manual con el ratón, por la propia creación o destrucción de la ventana, o por el comando configure. En general, no se debe de redimensionar o modificar una ventana dentro del comando al que llama el evento <Configure> si no se desa generar un bucle infinito.
El evento <Destroy> se genera cuando un widget es destruido.
Modificadores
Un modificador indica qué otro botón u otra tecla deben ser pulsados para ejecutar el evento. Modificadores típicos son las teclas Shift y Control. Los botones del ratón también pueden ser usdos como modificadores.
La siguiente tabla muestra los modificadores más habituales:
|
Control |
La tecla de Control. |
|
Shift |
La tecla de mayúsculas. |
|
Lock |
La tecla de bloqueo de mayúsculas. |
|
Alt |
La tecla de Alternativa. |
|
Button1, B1 |
Botón izquierdo del ratón. |
|
Button2, B2 |
Botón central del ratón. |
|
Button3, B3 |
Botón derecho del ratón. |
|
Double |
Doble click con uno de lo botones del ratón. |
|
Triple |
Triple click con uno de los botones del ratón. |
Parámetros para los comandos asociados
La siguiente tabla describe algunos de los parámetros que son pasados a los comandos (habitualmente procedimientos) por los eventos asociados a estos.
Hay que decir que no todos pueden ser utilizados por todos los eventos. Entre paréntesis, aparece aquelos eventos que sí los pueden utilizar.
|
%b |
Número del botón del ratón pulsado (ButtonPress, ButtonRelease). |
|
%f |
Si tiene el foco o no (0 o 1) (Enter, Leave). |
|
%h |
Alto del widget (Configure, Expose). |
|
%w |
El ancho del widget (Configure, Expose). |
|
%x |
La coordenada x, relativa al widget. |
|
%y |
La coordenada y, relativa al widget. |
|
%B |
Ancho del borde (Configure). |
|
%W |
Nombre del widget que recibe el evento. |
Un ejemplo
Como ejemplo, se va a escribir el código de cómo se podría capturar el ancho y alto de una ventana cuando es redimensionada con el ratón de forma interactiva.
Como se puede ver, se captura el evento <Configure>, y bastará con escribir %w y %h para que estos valores pasen como parámetros al procedimiento.