FABRICATION d'un timer
Un timer est bien pratique pour lancer une séquence qui se répête selon une période ajustable .
Rafraichir l'heure, démarrer un chrono, changer une image toutes les X secondes, appuyer une touche pendant le déplacement d'un widget, etc... les utilisations sont multiples.
Voici comment procéder.
Nous allons faire une petite application avec deux boutons et un label de couleur qui changera de couleur toutes les secondes par exemple.
Elle ressemblera à ceci :
Définissons deux variables :
set etat 0 set tempo 200
Créons maintenant deux boutons et un label
pack [button .b1 -text "start" -command {every $tempo timer; .b1 configure -state disabled; .b2 configure -state normal;}] -fill x pack [button .b2 -text "stop" -command {stop; .b2 configure -state disabled; .b1 configure -state normal;}] -fill x pack [label .l3 -bg red] -fill x
Créons cette procédure qui aura pour effet de créer un timer:
proc every {ms body} {eval $body; after $ms [info level 0]}
Nous avons donc un widget prêt à l'emploi qui, avec ces 3 procédures crée un timer exploitable et qui ne bloque pas l'application comme lorsqu'on utilise la commande after.
Pour voir un autre exemple , j'ai fait un métronome analogique dans la catégorie multimédia.
Regardez et analysez le code.
Merci pour votre attention.
Merci à Csaba pour son aide précieuse.
set etat 0 set tempo 200 pack [button .b1 -text "start" -command {every $tempo timer; .b1 configure -state disabled; .b2 configure -state normal;}] -fill x pack [button .b2 -text "stop" -command {stop; .b2 configure -state disabled; .b1 configure -state normal;}] -fill x pack [label .l3 -bg red] -fill x proc every {ms body} {eval $body; after $ms [info level 0]} proc timer {} { global etat # change picture switch $etat { 0 {.l3 configure -bg green; global etat; set etat 1} 1 {.l3 configure -bg red; global etat; set etat 0} } } proc stop {} { .l3 configure -bg red after cancel [after info] }
Retour au sommaire librairie TK