Creación de un menú

Para la creación de un menú se utiliza el comando menubutton para crear el botón que servirá para llamar a las diferentes opciones del menú:

menubutton .variable -text "Nombre" \
     -command "comando" 

A continuación se indica el nombre con el que se hará referencia al menú posteriormente:

menu .variable.nombre 

Despues se agregan cada una de las opciones:

.variable.nombre add command -label "Nombre de \
      la opcion" -command "comando1"
.variable.nombre add command -label "Nombre 2" \
      -command "comando2"
.variable.nombre add command -label "Nombre 3" \
      -command "comando3"
Y por último se "empaqueta" para que aparezca en la pantalla:
pack .menu1
El comando especificado al momento de crear las opciones puede ser un procedimiento en lugar de un comando del tcl, lo que nos permite que una opción del menú sea capaz de ejecutar algún otro programa completo del tcl.

Ejemplo:

#!/usr/local/bin/wish4.0
    menubutton .menu1 -text "Programas" \
         -menu .menu1.m
    menu .menu1.m
    .menu1.m add command -label "Primera" \
         -command "puts stdout Primera"
    .menu1.m add command -label "Segunda" \
         -command "puts stdout Segunda"
    .menu1.m add command -label "Tercera" \
         -command "puts stdout Tercera" 
    .menu1.m add command -label "Salir"   \
-command "exit"
    pack .menu1

Listas

Es posible acceder al contenido de una lista de tcl con la estructura listbox, la cual se crea de la siguiente forma:

listbox .nombre
Una vez creada se empaqueta:

pack .nombre
Y se pueden agregar elementos como a cualquier lista en tcl:

.nombre

Entradas de teclado

La forma mas sencilla de crear una entrada desde teclado es utilizando la estructura entry que tiene la siguiente sintaxis:

 entry .nombre -textvariable nomvar 
donde .nombre será el nombre que hará referencia a la estructura y nomvar es la variable que almacenará el valor que se introduzca en la ventana. Para empaquetarlo en pantalla se utiliza el comando pack:

pack .nombre
Ejemplo:

#! /usr/local/bin/wish4.0
entry .entrada1 -textvariable var1
  pack .entrada1

Un ejemplo mas elaborado es el siguiente, donde el contenido de la variable que se introduce se imprime inmediatamente en otra estructura del tk llamada "label" o etiqueta:

#! /usr/local/bin/wish4.0
entry .entrada1 -width 35 -relief sunken \
     -textvariable var1
label .et1 -width 10 -textvariable var1  \
     -relief sunken 
  pack .entrada1 .et1 -padx 10 -pady 10 -fill x 
Otra forma de entrada de datos desde teclado hacia el tk es la estructura llamada "text", la cual crea una ventana que permite la escritura de múltiples lineas de texto.

Su sintaxis es:

 text .nombre -width n1 -height n2 
Donde .nombre es el nombre de la estructura, n1 es el ancho de la ventana en número de caracteres y n2 es el alto de la ventana. Tambien es necesario empaquetar esta estructura con el comando pack.

Ejemplos:

Este primer ejemplo crea unicamente la ventana de texto en la pantalla:

#!/usr/local/bin/wish4.0
text .texto1 -width 45 -height 5 -relief sunken
  pack .texto1

Este otro ejemplo ademas de la ventana de texto, crea otra entrada y un botón, es uno de los editores de texto mas sencillos que se puedan crear con el tk, en la ventana pequeña se escribe el nombre de un archivo, en la grande el contenido del mismo y al momento de presionar el botón "Guardar" se creará el archivo. Naturalmente la sencillez extrema del ejemplo impide cargar un archivo desde el disco, y si no se teclea un nombre válido de archivo se generará un error, ademas, si el archivo ya existe se eliminará su contenido y se escribirá en el lo que se encuentre en la ventana, por esa razón se debe tener cuidado al momento de crear un archivo con este programa.
#!/usr/local/bin/wish4.0
text .texto1 -width 45 -height 5 -relief sunken
entry .nombre -width 30 -relief sunken  \
     -textvariable nomarch
button .guardar -text Guardar  \
     -command {guarda $nomarch}

pack .texto1
pack .nombre
pack .guardar

proc guarda { nombre } {
  set archivo [open $nombre w 0666]
  set texto [.texto1 get 1.0 end]
  puts $archivo $texto
  close $archivo
}


Selector

Este elemento del tk consiste en una barra con una escala, cuyo valor es seleccionado desplazando un indicador en dicha barra. Es parecido al control de volumen de un modular.

El comando para crearlo es:

scale .nombre -orient orientacion -width ancho -length largo -from val1 -to val2 -command comando - tickinterval intervalo

"orientación" puede ser horizontal o vertical; "ancho" y "largo" son valores enteros en pixeles para controlar en largo y ancho de la barra; val1 y val2 son los valores entre los cuales estará comprendido el posible valor del indicador; comando es el comando que realizará la barra, normalmente será la asignación del valor del indicador a alguna variable; intervalo se refiere al intervalo entre cada uno de los valores visibles en la barra.

Ejemplo:

#!/usr/local/bin/wish4.0
scale .scale1 -width 10 -orient horizontal \
  -length 300 
  -from 0 -to 60 -command "set var1" \
  -tickinterval 5 -relief raised

label .lab1 -width 10 -textvariable var1 \
  -relief sunken
pack .scale1 .lab1 -padx 1m -pady 2m -fill x

.scale1 set 20