Version 1 of A little A/D clock

Updated 2001-11-20 12:50:15

Richard Suchenwirth - This 30-LOC cutie is the final example of Einfach Tcl, but in order to save you scrolling through much German text, here it is by itself: a clock that shows time either analog or digital - just click on it to toggle. The first part is a compaction of Kevin Kenny's An analog clock in Tk, the second has evolved on the after page. Enjoy!


 #!/bin/sh
 # -*-Tcl-*- \
 exec wish $0
 proc every {ms body} {
     eval $body
     after $ms [list every $ms $body]
 }
 proc drawhands w {
     $w delete hands
     set secSinceMidnight [expr { [clock seconds] - [clock scan 00:00:00] }]
     foreach divisor {60 3600 43200} length {45 40 30} width {1 3 7} {
         set angle [expr {$secSinceMidnight * 6.283185 / $divisor}]
         set x [expr {50 + $length * sin($angle)}]
         set y [expr {50 - $length * cos($angle)}]
         $w create line 50 50 $x $y -width $width -tags hands
     }
 }
 proc toggle {w1 w2} {
     if [winfo ismapped $w2] {
         foreach {w2 w1} [list $w1 $w2] break ;# swap
     }
     pack forget $w1
     pack $w2
 }
 canvas .analog -width 100 -height 100 -bg white
 every 1000 {drawhands .analog}
 label .digital -textvar time -font {Courier 24}
 every 1000 {set ::time [clock format [clock sec] -format %H:%M:%S]}
 pack .analog
 bind . <1> {toggle .analog .digital}

Arts and crafts of Tcl-Tk programming