Informatica Grafica
C A P I T U L O12 Asociando Eventos

Existe 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:

<modificador-modificador-tipo-detalle>

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.

Tabla 12-1. Eventos más habituales.

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:

Tabla 12-2. 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.

Tabla 12-3. Parámetros para los comandos asociados.

%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.

Ejemplo 12-1.
proc Captura_Datos { ancho alto } {
puts "El ancho es $ancho"
puts "El alto es $alto"
} bind $w <Configure> "Captura_Datos %w %h"

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.

Previous Page Next Page


© 1995-98, etsimo WWW team
Última modificación: 19 de Agosto de 1998 - 17:47:27