package require Tk proc every {ms body} {eval $body; after $ms [info level 0]} proc lpick list {lindex $list [expr {int(rand()*[llength $list])}]} proc Candle {id} { set Color [lpick {yellow linen white orange gold "light yellow" goldenrod}] .c itemconfig $id -fill $Color if {$Color != "yellow" } {after 16 Candle $id} } proc Flicker {} { Candle [lpick $::Selection] } pack [canvas .c -width 200 -height 300 -background darkblue] .c create rect 95 250 105 280 -fill brown .c create rect 70 270 130 290 -fill black foreach dx {40 55 70 85 100} y {20 60 100 140 180} { .c create poly 100 $y [expr 100-$dx] [expr $y+70] \ [expr 100+$dx] [expr $y+70] -fill darkgreen -tag Tree .c create rect [expr 108-$dx] [expr $y+45] \ [expr 112-$dx] [expr $y+65] -fill red -tag Candle .c create oval [expr 107-$dx] [expr $y+36] \ [expr 113-$dx] [expr $y+44] -fill yellow -tag Flame .c create rect [expr 88+$dx] [expr $y+45] \ [expr 92+$dx] [expr $y+65] -fill red -tag Candle .c create oval [expr 87+$dx] [expr $y+36] \ [expr 93+$dx] [expr $y+44] -fill yellow -tag Flame } wm title . "Xmas" set Selection [.c find withtag Flame] every 200 { Flicker }
HJG Animated candles ! See also Design your own Christmas Tree