Tuesday, May 20, 2014

sesion interactiva: tablelist

Empecemos con checar cuantos "hijos" tiene la ventana principal, llamada "."
% winfo children
wrong # args: should be "winfo children window"
Me falló porque faltó un parámetro

% winfo children .
No me regresa nada, es que aun no le pongo controles a esta ventana


% proc tl {} {};edit tl
Edito (en otra ventana) un proc que crea una tablelist accesible con la variable "tbl"

proc tl {} {
global tbl
set tbl .tbl
tablelist::tablelist $tbl\
  -columns {0 "A" 0 "B" 0 "C" 0 "D" 0 "E"} -height 15 -width 100
pack $tbl
}

Creo un botón
% button .btn -text rengSel?
.btn
% pack button
wrong # args: should be "pack option arg ?arg ...?"
Me fallo' porque no hay botón llamado "button" (se llama .btn)

% pack .btn
Ahora si aparece botón en la ventana

% tl
invalid command name "tablelist::tablelist"
Falla porque no puse la "incorporación" de la librería en el proc...

Ahora si lo hago...
% package require tablelist
5.7

% tl
Ahora si aparece la tabla en la ventana (pero tuve que hacer un "resize" manual)

Le hago ediciones para que se le inserten renglones a partir de la lista de "hijos" de "."
% edit tl

Cuales son los "hijos" de "." ?
% winfo children .
.btn .__helpLabel .tbl .tbl-corner

Le inserto los hijos
% $tbl insert end [winfo children .]
k0
Pero me aparecen en un solo renglón...eso no es lo que quería...

"." tiene 4 hijos...
% llength [winfo children .]
4

Veamos esos 4 "hijos"
% foreach ctrl [winfo children .] {
puts $ctrl
}
.btn
.__helpLabel
.tbl
.tbl-corner

Quiero borrar el renglón...
% $tbl delete all
bad row index "all": must be active, anchor, end, top, bottom, @x,y, a number, a full key, or a name
Falla porque "all" no es un indice válido

% $tbl delete 0 end
Ahora si se borró

Le inserto un renglón por cada "hijo"
% foreach ctrl [winfo children .] {
$tbl insert $ctrl
}
bad row index ".btn": must be active, anchor, end, top, bottom, @x,y, a number, a full key, or a name
Falla porque me faltó poner donde insertar

Ahora si...
% foreach ctrl [winfo children .] {
$tbl insert end $ctrl
}

Al tener seleccionado el primer renglón, el comando "curselection" indica cual es la selección actual:
(numeración empieza en cero)
% $tbl curselection
0


Al tener seleccionado el renglón 2:
% $tbl curselection
1

Al tener seleccionado el renglón 3:
% $tbl curselection
2

Al tener seleccionado el renglón 4:
% $tbl curselection
3

Para obtener el valor de una de las celdas:
% $tbl cellcget 1,1 -text
No devuelve nada porque no hay nada en segunda columna, (recuerde, numeración empieza en cero)

Ah, entonces es así:
% $tbl cellcget 1,0 -text
.__helpLabel

Para obtener el valor en celda de:
renglón   =  la selección actual
columna  = 0 (numeración empieza en cero)
y estando seleccionado el renglon cuyo contenido de texto es "tbl-corner"
% $tbl cellcget [$tbl curselection],0 -text
.tbl-corner

Asignarle una acción a botón existente
% .btn configure -command {puts [$tbl cellcget [$tbl curselection],0 -text]}

Al hacer click en el botón...
.tbl-corner



Luego selecciono el tercer renglón en la tabla...y hacer click en botón
.tbl
(ya que ese es el contenido de esa celda)

No comments: