un petit chrono

 

dc 01/07/08 En développant tkhorloge, je me suis dit que rajouter un chrono. serait pas mal. En voilà un piloté par un bouton :

 package require Tk

 namespace eval chrono {
     variable id
     variable actif  0
     variable duree  0
     variable dureeC 0
     variable t0
     variable w
 }

 proc chrono::formatage {ms} {
     set s [expr {$ms / 1000000}]
     set texte [clock format $s -gmt 1 -format "%H:%M:%S"]
     set fms [expr { $ms - $s * 1000000 }]
     append texte [format ".%06d" $fms]
     return $texte
 }

 proc chrono::on {} {
     variable duree
     variable dureeC
     variable id
     variable w
     variable t0

     set d [expr { [clock microseconds] - $t0 }]
     set duree [expr {$dureeC + $d}]
     $w configure -text [chrono::formatage $duree]
     update idletasks
     set id [after 1 chrono::on]
 }

 proc chrono::start {} {
     variable actif
     variable t0

     set actif 1
     set t0 [clock microseconds]
     chrono::on
 }

 proc chrono::stop {} {
     variable actif
     variable id
     variable duree
     variable dureeC

     after cancel $id
     set actif 0
     set dureeC $duree
 }

 proc chrono::go! {wid} {
     variable w
     variable actif

     set w $wid
     if {$actif} {
 	chrono::stop
     } else {
 	chrono::start
     }
 }

 ttk::button .b -text [chrono::formatage 0]
 pack .b
 bind .b <1> [list chrono::go! .b]