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