Some imperfections:
- The order for creating the array and linking it to a matrix is fixed.
- Updates to the matrix (via the matrix's methods) are not always reflected in the table. Changes in the table (via the widget) are.
# Demonstrate the combination of ::struct::matrix and Tktable
#
package require struct
package require Tktable
#
# Create a matrix called "simpleTable"
#
::struct::matrix simpleTable
#
# The matrix must have some columns before it will accept rows
#
simpleTable add columns 4
simpleTable add row {A1 A2 A3 A4}
simpleTable add row {B1 B2 B3 B4}
simpleTable add row {C1 C2 C3 C4}
#
# A small glitch in the default formatter makes it necessary to
# force a new line
#
simpleTable format 2chan
puts ""
#
# Note: the array table_data must be defined before the link
# with the matrix!
#
table .table -variable table_data -width 4 -height 3
pack .table -fill both
simpleTable link -transpose table_data
simpleTable set cell 2 2 XX
puts "Elements: [array get table_data]"RS likes to depend on nothing (and has no Tcllib or Tktable on the iPaq, for instance). Here's a minimal solution to display a table (list of lists) in a grid of labels:
package require Tk
proc table {w content args} {
frame $w -bg black
set r 0
foreach row $content {
set fields {}
set c 0
foreach col $row {
lappend fields [label $w.$r/$c -text $col]
incr c
}
eval grid $fields -sticky news -padx 1 -pady 1
incr r
}
set w
}
#--- Test:
table .t {
{Row Head1 Head2}
{1 foo 42}
{2 bar 1234}
{3 grill testing}
}
pack .t
#--- Changing the contents, given row and column number:
after 2000 .t.3/2 config -text CoucouOnly after writing this, and reading the printout over a cup of coffee, I noticed that I had evidently reused the pattern of A little calculator... The more I code, the harder is code re-use, because it's hard to remember where it was, and what it was called... somehow, idea reuse is simpler, and more fun, too.LV Techniques for making code reuse easier
pack [text .t]
.t insert end "Headline for a little table\n\n"
set content {
{First Last}
{John Brown}
{Mary Smith}
{Konstantinos Papadopoulos}
}
.t window create end -window [table .t.x $content]
.t insert end \n\n
.t insert end "More plain body text continues here..."AM Alternatively, you can of course just Draw a table on a canvas, if you merely want to show it (and print it ...)
KPV See also Simple Tktable.

