Responder a Eventos
Para responder a eventos como ratón o teclado, etc. se puede usar bind, la sintaxis del comando es asi:> (bind nombre-control "<nombre-evento>" (función))
Nota: En LTK los controles son llamados "widgets"
Los nombres de los eventos van encerrados siempre entre dobles comillas "" y los caracteres < y >. Por ejemplo, para cambiar de color una etiqueta cada vez que se entra con el puntero del ratón:
> (bind etiqueta "<Enter>" (lambda(x) (configure etiqueta :foreground "green")))
Si queremos que se produzca una acción, luego de haber presionado el botón izquierdo del ratón:
> (bind boton "<Button-1>" (lambda(x) (do-msg "te amo Maria")))
Que nos muestra un bonito mensaje, al presionar un botón
El siguiente ejemplo nos muestra algunos eventos comunes:
Para probarlo, copie el siguiente texto y guárdelo en un archivo "eventos.lisp" luego carguelo o ejecutelo con su lisp.
;;;----------------------------------------------------------------------------------------------------------------
(load "~/ltk-0.96/ltk.fas")
(use-package :ltk)
(with-ltk()
(let* ((entrada (make-instance 'entry :width 20))
(etiqueta (make-instance 'label :text "Gol de Messi"))
(marco (make-instance 'frame))
(boton (make-instance 'button :master marco :text "Aceptar")))
(bind etiqueta "<Enter>" (lambda(x) (configure etiqueta :foreground "green")))
(bind etiqueta "<Leave>" (lambda(x) (configure etiqueta :foreground "red")))
(bind boton "<Button-1>" (lambda(x) (do-msg "te amo Maria")))
(bind etiqueta "<Double-Button-1>" (lambda(x) (do-msg "Doble click del ratón")))
(bind boton "<Button-3>" (lambda(x) (do-msg "Botón derecho del ratón")))
(bind boton "<Button-2>" (lambda(x) (do-msg "Botón central del ratón")))
(bind entrada "<Key-a>" (lambda(x) (do-msg "Has presionado la tecla a")))
(bind entrada "<Key-t>" (lambda(x) (do-msg "Has presionado la tecla t")))
(bind entrada "<Control-Key-t>" (lambda(x) (do-msg "Has presionado Ctrl + t")))
(bind entrada "<Control-Alt-Key-m>" (lambda(x) (do-msg "Has presionado Ctrl + Alt + m")))
(bind entrada "<Escape>" (lambda(x) (do-msg "Has presionado la tecla Escape")))
(pack etiqueta)
(pack entrada)
(pack marco)
(pack boton)
(configure marco :borderwidth 3)
(configure marco :relief :raised)))
;;;----------------------------------------------------------------------------------------------------------------
- Esto de los eventos, me da curiosidad...
La siguiente tabla muestra los eventos y sus modificadores:
Evento
|
Descripción
|
Modificadores
(los modificadores van separados
entre guiones "-"
)
|
ButtonPres, Button, B | Se ha presionado uno de los botones del ratón. | "<Button-1>": Se presiona el botón
izquierdo del ratón
"<Button-2>" Se presiona el boto central del ratón "<Button-3>" Se presiona el botón derecho del ratón Double: Doble click con uno de los botones del ratón. Ejemplo: "<Double-Button-1>": Doble click con el botón izquierdo Triple: Triple click con uno de los botones del ratón. |
Buttonrelease | Se ha dejado de presionar uno de los botones del ratón. | |
Configure | El control ha cambiado de tamaño, posición, etc. | |
Destroy | El control ha sido destruido | |
Enter | El puntero del ratón ha entrado en el control | |
Leave | El puntero del ratón ha abandonado el control | |
FocusIn | El control ha tomado el foco. | |
FocusOut | El control ha perdido el foco. | |
KeyPress, Key, K | Se ha presionado una tecla. | Va acompañado de la tecla que se presiona,
por
ejemplo:
"<Key-a>" "<Key-b>" "<Key-m>" Los modificadores son: Control, Shift, Lock y Alt para las teclas: control, mayúsculas, bloqueo de mayúsculas y Alt, respectivamente. Ejemplos: "<Control-Key-t>" Se ha presionado Control + t. "<Shift-Key-b>" Se ha presionado Shift + b. "<Control-Alt-Key-m>" Se ha presionado Control + Alt + m. También existen unas teclas ya definidas, tales como: "<Return>", "<Escape>", "<BackSpace>", "<Tab>", "<Up>", "<Down>", "<Left>", "<Right>", etc. |
KeyRelease | Se ha soltado la tecla presionada. | |
Motion | El puntero del ratón se mueve sobre el control. | |
Map | La ventana ha sido desplegada. | |
Unmap | La ventana ha sido iconificada. |
En este sitio hay un tutorial muy bueno sobre LTK de una universidad española:
tutorial - capitulo 12
Saludos, comenten :-P
Groso René!, todo muy claro
ResponderEliminar