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.