Tk
es un toolkit para la programación bajo Windows. Inicialmente fue diseñado para el sistema X window, pero actualmente ha sido migrado a otros sitemas, entre ellos Windows 95 y NT. Tk provee un conjunto de comandos Tcl que permiten manipular widgets. Un widget es una ventana del interface gráfico que presenta un aspecto particular y una determinada utilidad. Entre los widgets se encuentran botones, barras de scroll, menús, y ventanas de texto. Tk también proporciona un widget de próposito general para el dibujo, denominado canvas, en el que pueden ser creados líneas, circulos, cuadrados, bitmaps, etc.El sistema X window soporta herencia entre ventanas, y esto se refleja en los comandos de Tk La herencia en Tk significa que existe una ventana primaria o principal, y dentro de ella (también fuera de ella) pueden existir un número de ventanas hijas. De igual forma, las ventanas hijas pueden contener otras ventanas, y así sucesivamente.
Los widgets están bajo el control del geometry manager que controla su tamaño y posición en la pantalla. Hay numerosos geometry manager para Tk, pero en este trabajo va a utilizarse el más habitual, denominado packer. Para representar un widget en pantalla, primero debe ser incluido en una frame. Una frame es un widget que se encarga de contener otros widgets. Una vez creado un widget como hijo de una frame, estará creado pero no aparecerá en pantalla hasta que el packer lo coloque en su sitio.
Una aplicación basada e Tk tiene un control del flujo por eventos. Para poder ejecutar comandos como respuesta a estos eventos, existe el comando bind, el cual asocia a un evento un determinado comando, que se ejecutará en el preciso momento de producirse dicho evento. Los widgets de Tk tienen algunos de estos eventos asociados a determinados comandos definidos por defecto.
Un concepto importante es el foco; el widget que posea el foco será el que esté activo en ese momento. Tk proporciona comandos para cambiar el foco o pasarlo a otro widget.
La estructura básica de una aplicación Tk empieza creando los widgets, situándolos con el geometry manager y asociando los bind para el control de los eventos.
Todos los programas de Tk son llamados desde la consola, mediante el comando source, de la siguiente manera:
source c:/tcl/lib/prueba.tcl
Es importante recordar que el sentido de las barras que separan directorios es contrario al usado en Windows.
Hola Mundo en Tk
Siguiendo la tradición de todos los manuales de programación, el primer programa en Tk será algo relacionado con "Hola Mundo". En este caso se va a crear un boton, que al pulsarlo escriba "Hola Mundo!!!".
En este ejemplo se crea un botón con el texto "Hola Mundo". El comando que jecutará al ser pulsado será escribir en la consola el texto "Hola Mundo !!!". Finalmente, se se sitúa dicho botón con el packer, dejando 20 pixels de separación en el eje horiontal entre el borde del botón y el borde de la ventana que lo contiene, y 10 en el vertical. El resultado es este:
Nombre de los Widgets Tk
En el ejemplo anterior, a continuación de la palabra button, que declara este widget como un botón, aparece .hola. Tk utiliza un sistema para nombrarlos que refleja su posición en la herencia de los mismos. La ventana principal o raíz se denomina ".". Esto es similar a los nombres de directorios utilizados por el sistema UNIX, donde "/" es el directorio principal o raíz, y a continuación, separados por barras "/", aparecen los subdirectorios o ficheros que dependen de este directorio raíz. De igual forma, cada widget es hijo de la ventana principal, y recibirá un nombre tal como ".hola". Si hubiera otro widget dentro de ".hola", llamado "otro", se denominaría ".hola.otro", y así sucesivamente.
Atributos de los Widgets
Cada widget tiene una serie de atributos de los que va a depender su apariencia o funcionalidad. El programador podrá elegir qué atributos se le aplican dentro de los posibles para un determinado tipo de widget, y que valores se les aplica. Los nombres de los atributos empiezan con "-" seguido del nombre del atributo. Por ejemplo, para indicar qué texto aparecerá sobre un botón, se utilizará el atributo "-text"; para su ancho, "-width"; y para su alto "-height".
Estos atributos se declaran en el momento de crear el widget. Por ejemplo:
% button .hola -text "Hola" -width 50 -height 30
Pero también pueden modificarse o añadirse durante la ejecución del programa con el comando configure. Por ejemplo, si se desea cambiar el texto del botón anterior, será:
% .hola configure -text "Otro texto"
Puede cambiarse o añadirse más de un atributo a la vez.
También es posible averiguar durante la ejecución del programa estos atributos con el comando cget. Por ejemplo si se le interroga al botón anterior sobre su texto:
% .hola cget -text Otro texto
A continuación se presentan dos tablas. Una contiene los comandos para la creación de widgets, que se corresponden con los nombres de los posibles widgets, mientras que la otra consiste en los comandos de manipulación de estos.
|
button |
Crea un botón que ejecuta un comando. |
|
checkbutton |
Crea un botón de chequeo. Tiene dos posiciones, activado o desactivado. |
|
radiobutton |
Crea un botón de radio. Es similar al anterior, pero aparece formando un grupo, y sólo uno del grupo puede estar activado de cada vez. |
|
menubutton |
Crea un botón que presenta un menú. Serían los botones existentes en la barra de menú. |
|
menu |
Crea un menú. |
|
canvas |
Crea un canvas donde es posible dibujar. |
|
label |
Crea una etiqueta. Sólo es de lectura. No se puede escribir en ella. |
|
entry |
Crea una entrada de texto. Se utiliza para introducir datos. |
|
message |
Crea un cuadro de mensaje, sólo de lectura. |
|
listbox |
Crea una lista de texto. |
|
text |
Crea texto editable o no, de propósito general. |
|
scrollbar |
Crea las barras de scroll, tanto verticales como horizontales. |
|
scale |
Crea una escala que permite ajustar el valor de una variable con su desplazamiento. |
|
frame |
Crea un contenedor de widgets. Todos los widgets deben aparecer dentro de una frame |
|
toplevel |
Crea una ventana |
|
after |
Ejecuta un comando después de un cierto período de tiempo. |
|
bell |
Hace sonar un pitido. |
|
bind |
Asocia un comando Tcl con un evento del sistema. |
|
bindtags |
Crea clases bind y controla la herencia entre binds. |
|
clipboard |
Manipula el portapapeles. |
|
destroy |
Destruye un widget. |
|
fileevent |
Asocia un comando Tcl con un descriptor de fichero. |
|
focus |
Controla el foco de entrada. |
|
grab |
Fija el foco de entrada a un widget, quitándoselo a otro. |
|
image |
Crea y manipula imágenes. |
|
lower |
Da de baja una ventana. |
|
option |
Accede a la base de datos de los recursos. |
|
pack |
El packer geometry manager. |
|
place |
El place geometry manager. |
|
raise |
Da de alta una ventana. |
|
selection |
Manipula la selección. |
|
send |
Envía un comando Tcl a otro programa Tcl. |
|
tk |
Informa sobre el estado interno de Tk. |
|
tkerror |
Captura los errores. |
|
tkwait |
Detiene el programa en espera de un evento. |
|
update |
Actualiza la pantalla. |
|
winfo |
Informa acerca de las ventanas. |
|
wm |
Interactúa con el window manager. |