miércoles, 17 de septiembre de 2008

Primeros pasos con LTK ( parte 1 )

Hoy vamos a hablar de la creación de interfaces gráficas de usuario en Lisp. Hoy en día una buena interfaz es un requisito imprescindible para que un programa tenga éxito fuera del ámbito científico o puramente técnico. Pero además, para que el desarrollo del programa sea asumible por el programador, es preciso que el tiempo invertido en crear esa interfaz no sea excesivo.

La librería por excelencia para crear interfaces gráficas en Lisp es LTK ( http://www.peter-herth.de/ltk/ ). LTK es una creación de Peter Herth. Consiste en una tubería que transforma nuestro código lisp en código tcl que es ejecutado por el programa wish. Si no habéis entendido nada de la parrafada anterior, no os preocupéis. No es necesario entenderla para poder usarla, LTK es tremendamente sencilla de usar.

Primeramente, hay que instalar LTK. Para ello habremos de seguir 2 pasos:
  1. Instalamos el lenguaje de programación tcl/tk. Normalmente cualquier distribución de linux lo llevará instalado por defecto. Si no es así, instaladlo, usado apt-get, synaptic, yast, emerge o cualquier herramienta que use vuestra distribución. No es necesario instalar los paquetes de desarrollo.
  2. Instalamos la librería LTK propiamente dicha. Para ello, si disponemos de asdf-install, sólo tendremos que entrar en lisp y teclear
(asdf-install:install 'ltk )
Sólo tendremos que seguir las instrucciones que asdf-install nos irá dictando y ya tendremos LTK instalada.

Nuestro primer programa

Usar ltk es terriblemente fácil. Como muestra, veamos un primer programa que nos muestre el ya clásico "Hola, mundo" en una ventanita:

(use-package :ltk )
(with-ltk ()
(let
(
( etiqueta (make-instance 'label :master nil :text "Hola, mundo" ))
)
(pack etiqueta)
)

)

Veamos cómo nos ha quedado:

Voilà! Aquí tenéis una pequeña screenshoot de LTK corriendo nuestro ejemplo en un Windows XP.

No voy a extenderme hoy sobre que es lo que hace nuestro código. Habrá tiempo para eso. Sólo espero que lo que habéis visto haya despertado vuestro interés por la programación gráfica en Lisp usando LTK.

Hasta la próxima!

7 comentarios:

Anónimo dijo...

Voy a realizar mi proyecto de fin de carrera en LISP. ¿Para interfaces gráficas LTK es lo mejor actualmente? ¿Existe algún tutorial en castellano de LTK? ¿Podrias recomendarme alguna página?

Gracias y una saludo.

Anónimo dijo...

Hola!
LTK tiene la ventaja de que corre virtualmente en cualquier sitio, además de que en Windows y Mac OS X tiene una interfaz nativa bastante bonita. En SO's basados en Unix su interfaz es tipo motif, lo cuál deja bastante que desear, aunque a cambio se ejecutará sin problemas. Además, está portada a muchas implementaciones de Lisp distintas, con lo cuál no debería haber problemas de compatibilidad. Su principal desventaja es la velocidad, para algunas aplicaciones ( normalmente, para programas que dibujen bastantes datos -- juegos, gráficas, etc... ) puede ser un poco lenta. No conozco ningún tutorial en español, aunque aquí tienes la documentación original en inglés.

Una cosa que debes saber es que ltk es muy simple: es una interfaz escrita en lisp para una tubería por dónde se envía código en tcl al intérprete de tcl (wish), que es quién realmente muestra la interfaz. Las órdenes de TK (el toolkit gráfico de tcl) son casi directamente extrapolables a ltk, de manera que cualquier tutorial de TK en español debería serte de bastante utilidad. Aquí te dejo el enlace a este tutorial de la Universidad de Oviedo .

También puedes probar otras librerías como cells-gtk o wxcl , basadas en gtk y wxwidgets, respectivamente. Yo particularmente no las uso ( mi interés es principalmente el cálculo científico y las interfaces gráficas que suelo necesitar son muy simples ), pero no deberías tener problemas para ejecutarlas, por ejemplo, en un Windows XP + clisp.

Espero haberte servido de ayuda. Suerte con el proyecto!

Anónimo dijo...

Estoy empezando a usar LTK, y quería realizarte una consulta porque si puedes responderme sería de gran ayuda para mí:

¿Existe algún comando que sea justo lo contrario a "pack"?

Es decir, primero creo un botón y lo pongo en al canvas con pack. Pero me gustaría eliminarlo del canvas una vez que se pulse.

Gracias!

Anónimo dijo...

Me respondo a mi mismo. Con la instrucción destroy puedo eliminar widgets del canvas.

Juan José dijo...

Hola ..primero Gracias por el aporte=) .Recien empiezo en Lisp..y utilizo el Sw LispWorks Personal..veoque tu usas otro Sw ..cual es y como lo puedo descargar??
si es posible la respuesta mandala a mi correo lynktaro06@hotmail.com

Rene dijo...

Muchas gracias por el aporte, soy novato en lisp!!! Yo uso ubuntu, para que funcionen los ejemplos tuve que instalar tcl8.5 y tk8.5 (las versiones por defecto eran 8.4). No pude usar asdf:install para cargar tlk, en vez de ello use quicklisp.

Rene dijo...
Este comentario ha sido eliminado por el autor.