Version 8 of clock.tcl

Updated 2005-07-19 11:43:38

# clock.tcl

 proc every {ms body} {
    eval $body
    after $ms [list every $ms $body]
 }
 pack [label .l -textvar time -font {Tahoma 24}]
 pack [button .b -text X -command exit]
 every 1000 {set ::time [clock format [clock sec] -format %H:%M:%S]}

LV It probably would be best for whomever added the above to add a name and a EULA type statement indicating the code is allowed to be reused. - RS: I put it here in order to test whether pages with .tcl titles are still delivered as plain text (they aren't), and trying to have my XDA execute it somehow - but it didn't work :( And re licensing: doesn't Who owns the content of this Wiki tell it clearly enough?

Well, it certainly sets a general expectation. However, applications having the licensing spelled out explicitly ensures there is no confusion when the application is reaped from the wiki into a distribution.


EKB Here's a version that has a task timer as well as a clock. It lacks the elegant simplicity of the code above, but it adds some functionality that I was looking for.

 wm attributes . -topmost 1

 image create photo actcross16 -data {
   R0lGODlhEAAQAIIAAASC/PwCBMQCBEQCBIQCBAAAAAAAAAAAACH5BAEAAAAA
   LAAAAAAQABAAAAMuCLrc/hCGFyYLQjQsquLDQ2ScEEJjZkYfyQKlJa2j7AQn
   MM7NfucLze1FLD78CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJz
   aW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVz
   ZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7
 }

 image create photo appclock16 -data {
   R0lGODlhEAAQAIUAAPwCBHy+/HS6/Gy2/ITC/Pz+/Fyu/FSm/Pz6/ESW7Pzm
   hPzqnPzurOz2/OTu/PzmjPzqpAR2/PzyxPz2xPz2zEye9NTm/ARy/Pz21Mzi
   /Lza/DyK3PzutPzyvPzyzPz63Pz67DyO5KzS/Pz23KTO/DSC1DSC3JzK/CR6
   zPz+9Iy+/FSq/IS6/BxyxPT2/Hy2/HSy/MTe/Gyu/CRyxJTG/IS+/DSG1AAA
   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaz
   QIBQGAgIBIPBcAkgBArQqOHAJESRA0MBgUgMrYWjYrFgHA4NhxfwFCgeC0hE
   MqFULN5nGF6+SDAYCRkaG21wEBwdER4fICAhIhsCBQNkDBwRFxgjjhskJZMD
   iBeZF44gBSYnKAMFBpd/m44pKSUqrFArE4yNqKkqLC0ABi4HHhinBSkFLS/C
   ACtpFQmOUCYlLDDPABUOGTEhJeIvLzIzTAkJIiInNDXO20wbNiYoKOdLfkEA
   If5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2
   ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDov
   L3d3dy5kZXZlbGNvci5jb20AOw==
 }

 proc every {ms body} {
    eval $body
    after $ms [list every $ms $body]
 }

 proc timeElapsed {sec} {
    set hours [expr {$sec / 3600}]
    set mins [expr {($sec / 60) % 60}]
    return [format "%02d:%02d" $hours $mins]
 }

 set timerstate 0
 proc toggleTimer {b} {
    if {$::timerstate} {
        $b config -relief flat
        set ::timerstate 0
    } else {
        $b config -relief sunken
        set ::t0 [clock sec]
        set ::timerstate 1
    }
 }

 ## -- Top frame
 pack [frame .top] -side top
 pack [label .top.l -textvar time -font {Tahoma 18}] -side left

 # Buttons
 pack [frame .top.buttons] -side right
 set clockbutton [button .top.buttons.t -image appclock16 -relief flat]
 pack $clockbutton -side left
 pack [button .top.buttons.close -image actcross16 -command {exit} -relief flat] \
    -side left

 ## -- Bottom frame
 pack [frame .bottom] -side bottom
 pack [label .bottom.l -textvar telapsed -font {Tahoma 10}]

 $clockbutton config -command "toggleTimer $clockbutton"

 ## -- Start!
 every 1000 {
    set ::time [clock format [clock sec] -format %H:%M]
    if {$::timerstate} {set ::telapsed [timeElapsed [expr {[clock sec] - $::t0}]]}
 }

Category Application | Category GUI | Category Date and Time