Richard Suchenwirth 2007-12-11 - grid is a powerful geometry manager in Tk. Following is a set of functions that allows to use grid functionality in very compact code, based on these considerations:
While being simple, this approach also allows introduction of custom composite widgets, like the path selector p which comes up as an entry with a button labeled "..." that brings up a directory chooser dialog.
proc show_ui {} { package require Tk grid x [l "Example configuration"] grid [l Project] [e project] -sticky ew grid [l "Project path"] [p project_path] -sticky ew grid [l "\# feeders"] [s n_feeders 1 8] -sticky w grid x [l ""] ;# extra empty row grid x [b OK generate] -sticky ew wm resizable . 0 0 } set winid 0 #---------------------- Here come the simple widget wrappers: proc b {label cmd} {button .[incr ::winid] -text $label -command $cmd} proc e varname {entry .[incr ::winid] -textvariable ::$varname -width 30} proc l label {label .[incr ::winid] -text $label -anchor w} proc p varname { set f [frame .[incr ::winid]] button $f.2 -text ... -command "set $varname \[tk_chooseDirectory\]" -pady 0 entry $f.1 -textvar $varname pack $f.2 $f.1 -side right pack $f.1 -fill both -expand 1 set f } proc s {varname from to} { spinbox .[incr ::winid] -textvariable ::$varname -from $from -to $to } proc generate {} {exit} ;# should do something before exit show_ui