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] }
Procedure pour les dates et les heures
Pour simplifier le code , j'ai créé de petites procédures pour avoir l'heure, la date, le mois ,l'année etc.. ci-dessous :
Voici le code à insérer :
proc Year {} { return [clock format [clock seconds] -format "%Y"] }
Il suffit simplement de l'appeler par cette commande :
puts [Year]
Le résultat sera un numéro sur 4 digits correspondant à l'année comme ceci : 2025
Voici le code à insérer :
proc Month {} { return [clock format [clock seconds] -format "%B"] }
Il suffit simplement de l'appeler par cette commande :
puts [Month]
Le résultat sera le nom du mois en Anglais comme ceci : January
Voici le code à insérer :
proc Week {} { return [clock format [clock seconds] -format "%W"] }
Il suffit simplement de l'appeler par cette commande :
puts [Week]
Le résultat sera le numéro de semaine actuel comme ceci: 10
Voici le code à insérer :
proc Day {} { return [clock format [clock seconds] -format "%A"] }
Il suffit simplement de l'appeler par cette commande :
puts [Day]
le résultat de la console sera le jour au format anglais comme ceci : Saturday
Voici le code à insérer :
proc Hour {} { return [clock format [clock seconds] -format "%H"] }
Il suffit simplement de l'appeler par cette commande :
puts [Hour]
le résultat de la console sera le jour au format anglais comme ceci : 11
Voici le code à insérer :
proc Minute {} { return [clock format [clock seconds] -format "%M"] }
Il suffit simplement de l'appeler par cette commande :
puts [Minute]
le résultat de la console sera le jour au format anglais comme ceci : 15
Voici le code à insérer :
proc Second {} { return [clock format [clock seconds] -format "%S"] }
Il suffit simplement de l'appeler par cette commande :
puts [Second]
le résultat de la console sera le jour au format anglais comme ceci : 23
Voici le code à insérer :
proc Time {} { return [clock format [clock seconds] -format "%H:%M:%S"] }
Il suffit simplement de l'appeler par cette commande :
puts [Time]
Le résutat sera les heures minutes secondes séparés par le symbole deux points) comme ceci : 11:13:15
Retour au sommaire librairie TK