Librairie tk › Les timers

FABRIQUER UN TIMER

 

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 :

1) Création de variables de travail

Définissons deux variables :

  • etat sera une variable pour savoir quelle couleur afficher ( etat 0 (rouge) ou 1 (vert))
  • tempo sera la période en milliseconde (ici 200ms)
set etat 0
set tempo 200

2) Création de l'interface

Créons maintenant deux boutons et un label

  • un bouton start pour démarrer le timer
  • Un bouton stop pour l'arrêter
  • Un label rouge qui fait office de led (rouge vert rouge vert etc...)

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

3 ) Création du timer

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.

 

6) Code complet de l'exemple

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