Generar un menú
Como este tema no lo encontré por ninguna parte. Voy a mostrar como generar menúes con LTK en Common-Lisp. La ventana principal es un "toplevel" a la que debe asociarse un menú que será el maestro.(setf menu-maestro (make-instance 'menu)
(configure *tk* :menu menu-maestro)
Deben generarse los submenues, que son los que contienen los títulos de cada conjunto de botones de menú. Supongamos que tenemos que generar menúes para un juego:
(setf menu-juego (make-instance 'menu
:text "Juego"
:master menu-maestro))
(setf menu-ayuda (make-instance 'menu
:text "Ayuda"
:master menu-maestro))
Ya estan los titulos de cada menú, lo único que falta ahora son los botones para cada menú, vamos a generarlos:
Para el menu "Juego":
(setf boton-juego-nuevo (make-instance 'menubutton
:text "Nuevo Juego"
:master menu-juego
:command (lambda()
(do-msg "Aquí va una función para generar un nuevo juego"))))
(setf boton-salir (make-intance 'menubutton
:text "Salir"
:master menu-juego
:command (lambda() (setf *exit-mainloop* t))))
Para el menú Ayuda:
(setf boton-about (make-instance 'menubutton
:text "Acerca de...
:master menu-ayuda
:command (lambda() (do-msg "Mi juego - Copyleft Cachito 2014"))))
Vamos a ver el programa completo:
;-------------------------------------------------------------------------
(defpackage :mi-juego
(:use :common-lisp :ltk)
(:export #:main))
(in-package :mi-juego)
(defun main ()
(setf *debug-tk* nil)
(with-ltk ()
(let* ((menu-maestro (make-instance 'menu))
(menu-juego (make-instance 'menu :text "Juego" :master menu-maestro))
(menu-ayuda (make-instance 'menu :text "Ayuda" :master menu-maestro))
(boton-juego-nuevo (make-instance 'menubutton
:text "Juego nuevo"
:master menu-juego
:command (lambda ()
(do-msg "Aquí va una función para generar un nuevo juego"))))
(boton-salir (make-instance 'menubutton
:text "Salir"
:master menu-juego
:command (lambda () (setf *exit-mainloop* t))))
(boton-about (make-instance 'menubutton
:text "Acerca de..."
:master menu-ayuda
:command (lambda () (do-msg "Mi juego - Copyleft Cachito 2014")))))
(configure *tk* :menu menu-maestro)
(wm-title *tk* "Mi juego")
(minsize *tk* 300 200)
(maxsize *tk* 300 200))))
;-----------------------------------------------------------------------------------
Guardamos el programa en un archivo .lisp. Cargamos el LTK y luego nuestro programa.
> (load "c:/Descargas/ltk-0.98/ltk.lisp")
> (load "c:/mi-programa.lisp")
Esta dentro del paquete mi-juego, para ejecutarlo hacemos:
> (mi-juego:main)