[HJG] 2014-03-26 - Demo: grid of 1000 buttons. ====== # http://wiki.tcl.tk/39622 # gridDemo-grid3b.tcl package require Tk global Prg set Prg(Title) "Grid-Demo_BigGrid" set Prg(Version) "v0.06" set Prg(Date) "2014-03-28" set Prg(Author) "Hans-Joachim Gurt" set Prg(Contact) [string map -nocase {: @ ! .} gurt:gmx!de] set Prg(About) "Grid-Demo - BigGrid" set Prg(Msg) "big grid, with lots of buttons" proc sleep {N} { after [expr {int($N * 1000)}] } proc Start {} { set ::Prg(Msg) "Starting..." after 1000 { .b_a1 invoke; } after 1500 { .b_b2 invoke; } after 2000 { .b_c3 invoke; } after 2500 { .b_c3 invoke; } after 3500 set ::Prg(Msg) "Done." } proc Hello {} { set ::Prg(Msg) "Hello..." set d 1000 foreach bt { d4 e4 f4 g4 h4 f5 f6 d7 e7 f7 g7 h7 d9 d10 d11 d12 e9 f9 f10 f11 g9 h9 h10 h11 h12 d14 e14 f14 g14 h14 h15 h16 h17 d19 e19 f19 g19 h19 h20 h21 h22 d24 d25 d26 d27 e24 e27 f24 f27 g24 g27 h24 h25 h26 h27 d30 d31 e30 e31 f30 f31 h30 h31} { incr d 100 after $d .b_$bt invoke; } # sleep 1; # set ::Prg(Msg) "Done !" incr d 1000 after $d [ list set ::Prg(Msg) "Done !" ] } proc ButtonProc { b } { set c [ .b_$b cget -bg ] ;# SystemButtonFace set ::Prg(Msg) "Button pressed: $b ($c)" if { $c=="red" } { set c2 cyan } else { set c2 red } .b_$b configure -bg $c2 } #: Main wm title . "$Prg(Title) $Prg(Version)" puts "$Prg(Title) $Prg(Version)" label .lb_1 -text "GridDemo" -width 12 -bg white -pady 10 label .lb_2 -textvariable Prg(Msg) -bg grey -pady 10 grid .lb_1 option add *Button.width 2 ;# "m10", "w10" etc. look a bit cramped # option add *Button.height 2 ## button .b_11 -text "11" -command { ButtonProc "11" } set nB 0 set maxCol 40 # set maxRow 20 # for {set r 1} {$r<=$maxRow} {incr r} { foreach r { a b c d e f g h i j k m n o p q r s t u v w x y z } { set xb "grid " for {set c 1} {$c<=$maxCol} {incr c} { incr nB 1 button .b_$r$c -text "$r$c" -command "ButtonProc $r$c" append xb ".b_$r$c " ;# collect buttons } append xb "-sticky nsew" ;# create a complete row of the grid, e.g.: eval $xb ;# grid .b_a1 .b_a2 .b_a3 .b_a4 -sticky nsew } set ::Prg(Msg) "Buttons created: $nB" grid .lb_2 -sticky ew option add *Button.width 7 option add *Button.height 1 button .bt_start -text "Start" -command { Start } button .bt_hello -text "Hello" -command { Hello } button .bt_quit -text "Quit" -command { exit } ;# ?? place buttons in specific location ?? grid .bt_start - - .bt_hello - - .bt_quit grid configure .lb_1 -columnspan $maxCol -padx 4 grid configure .lb_2 -columnspan $maxCol -padx 4 grid configure .bt_start -columnspan 4 -padx 4 grid configure .bt_hello -columnspan 4 -padx 4 grid configure .bt_quit -columnspan 4 -padx 4 -sticky e focus -force .bt_start #. ====== See also: * [after] <>Example | GUI