Translate

viernes, 2 de noviembre de 2012

Crear Interfaces Gráficas en Lisp con LTK (cuarta parte)

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