[ulis], created 2003-09-17, Flowered checkbuttons. Updated 2003-09-20. [KPV]: Heaven help you if you ever add comments to your code. [ulis] done [KPV]: I was referring to comments that appear at the end of a line of code. With your coding style, such comments would break your code. [ulis] I don't think so and had no problem with that. Coding style is matter of taste and I hate the style you tried to impose. [Jorge Moreno]: This is a very interesting piece of code, if we just could have a more descriptive title, like "Using multiple images in a single canvas"... [http://perso.wanadoo.fr/maurice.ulis/tcl/flowers.gif] ---- '''The script''' # Please, download the images files in the current directory before executing the script. # http://perso.wanadoo.fr/maurice.ulis/tcl/flower-1.gif # http://perso.wanadoo.fr/maurice.ulis/tcl/flower-2.gif # http://perso.wanadoo.fr/maurice.ulis/tcl/flower-3.gif # -------------------------------- # # flowers # # -------------------------------- package require Tk # ------------- # parameters # ------------- # name color file set parms \ { {flower1 DeepPink3 flower-1.gif} {flower2 orange flower-2.gif} {flower3 blue flower-3.gif} } # ------------- # nmage/bimage packages # ------------- # create a canvas with n images proc nmage {w args} \ { # take size from the first image set image [lindex $args 0] set ww [image width $image] set hh [image height $image] # center coordinates set x [expr {$ww / 2}] set y [expr {$hh / 2}] # create canvas canvas $w -width $ww -height $hh -highlightt 0 # create the images foreach image $args \ { $w create image $x $y -anchor center -image $image } } # create a canvas with a mini and a micro image proc bimage {n} \ { # take size from the full image set image $::names($n) set ww [image width $image] set hh [image height $image] # create the mini & the micro image from the full image foreach {type factor} {mini 4 micro 8} \ { set ww2 [expr {$ww / $factor}] set hh2 [expr {$hh / $factor}] image create photo ${type}$n -width $ww2 -height $hh2 ${type}$n copy $image -subsample $factor } # create a canvas with the mini & micro images nmage .$n mini$n micro$n } # ------------- # mechanism # ------------- # called on n-th choice (click on canvas) proc select {n} \ { # select the little image foreach i $::list { choose $i $n } # show the n-th image foreach i $::list { .0 itemconf $i -state hidden } .0 itemconf $n -state normal # show its name .name config -text $::names($n) # set background color set color $::colors($n) foreach w {. .name .0} { $w config -bg $color } foreach i $::list { .$i config -bg $color } } # choose between the mini & the micro image proc choose {i n} \ { set a 1; set b 2 if {$i == $n} { set a 2; set b 1 } .$i itemconf $a -state hidden .$i itemconf $b -state normal } # ------------- # create images # ------------- set i 0 foreach item $parms \ { foreach {name color file} $item break lappend list [incr i] set names($i) $name set colors($i) $color set files($i) $file } foreach i $list { image create photo $names($i) -file $files($i) } # ------------- # create widgets # ------------- # the canvas with the full images foreach i $list { lappend images $names($i) } eval [linsert $images 0 nmage .0] # the label with the name label .name -font {Times -24} # the selection canvas foreach i $list \ { # canvas with a mini and a micro image bimage $i # call change on click bind .$i <1> [list select $i] } # ------------- # place & display widgets # ------------- grid .0 -row 0 -column 1 -columnspan 3 grid .name -row 1 -column 1 -columnspan 3 foreach i $list { grid .$i -row 2 -column $i } # ------------- # do it! # ------------- wm title . flowers select 1 ---- [Category Example] | [Category Graphics]