tcl-tk: (0.03) (potato) *EN DESARROLLO* Esencia de uso del interface gráfico tk del lenguaje tcl Cambios: 0.00 9/2/01 empiezo a trastear 0.01 10/2/01 primera versión 0.02 11/2/01 text, scroll y su conexión, ventana:editar, lista 0.03 18/2/01 expansión al redimensionar 0.04 19/2/01 rodeo correcto para usar binding en visual-tcl ANTES DE EMPEZAR: Puedes utilizar el paquete visual-tcl (comando vtcl) para crear el interface tk Ejemplos de aplicaciones interesantes tcl/tk en Potato - pgaccess (frontend de postgreSQL) - printop (control de spooler lprng) LA ESENCIA DE TK - Creación de widget (toplevel, frame, ...) - Colocación, gestor de geometría (grid, pack, place) - Control desde tcl (.nombreDelWidget configure) - Conexión a eventos (-command, bind) NOMBRE DE WIDGETS .ventana.grupo.nombre ;# El primer "." es la ventana principal .ventana:editar.grupo.nombretal ;# ":" es valido como una letra TIPOS DE WIDGETS - toplevel ventana - frame contenedor dentro de la ventana (agrupa otros widgets) - button botón - label etiqueta - entry entrada de texto - listbox lista desplegable - checkbutton botón biestado - radiobutton botones excluyentes mutuamente - text campo de varias lineas de texto - scroll barra de desplazamiento - listbox lista - menubutton botón de menú GESTORES DE GEOMETRIA pack: Posición relativa entre elementos, expansión al redimensionar ventana grid: Rejilla (0, 1, 2, 3, etc...) place: Posición X,Y exacta DETALLES - En toplevel se emplea "wm" para modificar la ventana ya que está bajo control del gestor de ventanas (Window Manager) EJEMPLO SENCILLO Juega con visual-tcl y mira el archivo resultante ;-) EJEMPLOS DE CODIGO (trucos para visual-tcl): Hacer que los campos se expandan al redimensionar la ventana 1) Usar el gestor de geometría "pack" 2) Activar en "Geometry" expand=yes 3) poner en "fill" el eje de expansión (x,y,both) NOTA: Hay que usar frames para agrupar etiquetas y entrys y para los grupos de botones Para que al cerrar una ventana se acabe la aplicación: 1) Botón de cerrar (-command) destroy .ventana ;# cierra la ventana exit 0 ;# termina la ejecución sin error 2) Y al cerrar la ventana desde el wm, añadir en main (visual-tcl): bind .ventana {exit 0} Cambio del nombre de una etiqueta en ejecución: .form.label1 config -text "Texto de la etiqueta" Poner el contenido de un entry: A) .form.entry1 delete 0 end ;# Borrar todo el contenido .form.entry1 insert 0 "Valor inicial" ;# Insertar en inicio contenido ;# let contenido [.form.entry1 get] ;# Para leer el contenido ? B) *ESTO SOLO PARECE FUNCIONAR DENTRO DE UNA MISMA FUNCION* (POR PROBAR) - Asignale una variable usando el atributo "text var" p.e.: usuario - Declara esa variable como "global" p.e.: global usuario Poner el contenido de un campo de edición de texto: .form.text1 delete 0.0 end ;# Borrar todo el contenido .form.text1 insert 0.0 "Valor inicial" ;# Insertar en inicio contenido ;# let contenido [.form.text1 get 0.0 end] Conectar barra de scroll vertical a campo de edición de texto/lista: 1) En text1 "y scroll cmd" (-yscrollcommand): .form.scroll1 set 2) En scroll1 "command" (-command): .form.text1 yview Poner el contenido de una lista: .form.list1 delete 0 end ;# Borrar todo el contenido .form.list1 insert 0 uno dos "el tres" ;# Insertar en inicio contenido Obtener la selección de una lista let SeleccionActual [.form.list1 curselection] ;# Devuelve 0,1,2 y ;# NULL si no hay sel. let Contenido [.form.list1 get $SeleccionActual] Ejecutar función al hacer doble click sobre un elemento de la lista: (NOTA: no funciona: aún no se ha hecho la selección) 1) crear función "showventana" conteniendo: Window show .form bind .form.list1 {funcion} ;# Doble Click # o como alternativa: bind .form.list1 {funcion} ;# Click(soltar) 2) llamar siempre a showventana para abrir esa ventana MOTIVO: El lugar correcto es añadir al final del código de la función de esa ventana, pero visualtcl 1.20 lo machacará al salvar Abrir/mostrar una ventana al pulsar un botón (visual-tcl) Window destroy .ventana ;# Elimino/vacio primero para que Window show .ventana ;# que aparezca sobre las otras MAS INFO man Tcl; man 3 entry; man 3tk bind # comandos tk (wm, entry, grid, ...) Ejecutar /usr/share/doc/tk8.2/examples/widget, muestra todos los widgets en acción y puedes ver los fuentes...