Informatique et sciences du numérique Lycée Pierre Émile Martin
L – Gestion du temps
Créer une animation ( balle qui rebondie, personnage qui avance, projectiles qui tombent)
nécessite une boucle « répéter , à intervalle de temps régulier ». Pour cela deux outils sont utiles sous Python.
A partir du module time. Il contient deux fonctions essentielles
Pour plus de clarté Tester en Console Python ( fenêtre du bas dans Edupython), les instructions suivantes.
>>> from time import*
>>> time()
>>> sleep(10)
>>> debut=time()
>>> fin=time()
>>> print(round(fin – debut))
Ex L1 : Minuteur
Écrire un petit programme qui affiche un compte à rebours de 5s comme ci-contre.
A partir du module tkinter
Attention : la fonction à appeler s'écrit sans paramètres ni parenthèse, comme pour l'option command d'un bouton.
Ex L2 : Bouton Minuteur
Voici par exemple un programme affichant un compteur
à partir de 0 secondes puis augmentant indéfiniment.
Le transformer en minuteur comme le précédent :
à partir de 10 s jusqu'à 0.
def chrono():
# on arrive ici toutes les 1000 ms
global actu
Minuteur.config(text='Debut depuis '+str(actu)+' s' )
actu=actu+1
fen.after(1000,chrono)
#####################################
from tkinter import *
from time import *
fen = Tk()
fen.title("minuteur")
actu=0
Minuteur=Label(fen,text="Debut depuis 0 s")
Minuteur.pack()
chrono()
fen.mainloop()
Supplément pour les rapides :
Faites un jeu où vous avez 10s pour désamorcer une bombe en cliquant sur un bouton
sleep( t ) : Effectue une pause de t secondes. Mais tout le programme est en pause<!
time() : Renvoie l'heure POSIX. C'est à dire le nombre de secondes écoulées depuis le 1er Janvier 1970.
Peu pratique pour avoir la date, mais permet de mesurer des intervalles de temps.
La méthode 'after' permet de déclencher une fonction après un délai précisé en millisecondes.
En voici la syntaxe<: fenetre.after ( delai, fonction)
Informatique et sciences du numérique Lycée Pierre Émile Martin
Ex L3 : Diagonales
a) Expérimentez le code suivant qui crée un triangle et le fait bouger à travers l’écran
from Tkinter import *
import time
fen = Tk()
fond =.Canvas(fen, width=500, height=500)
fond.pack()
bouton_sortir = Button(fen, text="Sortir", command=fen.destroy).pack()
forme=fond.create_polygon(10, 10, 10, 60, 50, 35)
for x in range(0, 100):
fond.move(forme, 5, 0)
fen.update()
time.sleep(0.05)
fen.mainloop()
L'instruction fen.update() force l’objet fen à se mettre à jour. (Sinon le triangle ne bougerai qu'à la fin de la boucle !)
Enfin time.sleep()  demande à python d'attendre 0,05 s.
b) Modifier le programme pour faire déplacer le triangle en diagonale et revenir à son point de départ
La méthode 'move() ' prend pour arguments<:
l'item à bouger, le déplacement horizontal ( positif =vers la droite) et vertical (négatif = vers le haut).
Informatique et sciences du numérique Lycée Pierre Émile Martin
Éléments de réponses
Si vous êtes bloqués ou pour comparer
Ex L1 Minuteur
from time import*
actu =time()
fin=time()+5
while fin - actu >= 0 :
print ("Reste ",round(fin - actu),"secondes.")
sleep(1)
actu = time()
print ("C'est cuit !")
Ex L2 Minuteur
def chrono():
# on arrive ici toutes les 1000 ms
global actu
if actu>0:
Minuteur.config(text='Reste '+str(actu)+' s' )
actu=actu-1
fen.after(1000,chrono)
else:
Minuteur.config(text='Stop' )
#####################################
from tkinter import *
from time import *
fen = Tk()
fen.title("minuteur")
actu=10
Minuteur=Label(fen,text="Reste 10 s")
Minuteur.pack()
chrono()
fen.mainloop()
Supplément
# Créé par Leclerc, le 31/08/2013
from tkinter import*
import time
def chrono():
global actu,fin
reste=int(round(fin-actu))
if stop==True :
bouton.config(text=" OUF !!")
else :
if reste>0 :
temps.config(text='Compte à rebour : '+str(reste)+' s')
actu=time.time()
fenetre.after(1000,chrono)
else :
temps.config(text='Compte à rebour : '+str(reste)+' s')
bouton.config(text="BOUM !!")
def desamorce() :
global stop
stop=True
###########################################################
Informatique et sciences du numérique Lycée Pierre Émile Martin
fenetre=Tk()
fenetre.geometry("300x50")
fenetre.title("Cliquer pour désamorcer")
temps=Label(fenetre,text="COMPTE A REBOUR ",fg='red')
temps.pack()
bouton=Button(fenetre,text="OFF",bg='white',command=desamorce)
bouton.pack()
stop=False
actu = time.time()
fin= time.time()+10
chrono()
fenetre.mainloop()
Ex L3 : Diagonales
from Tkinter import *
import time
fen = Tk()
fond =Canvas(fen, width=500, height=500)
fond.pack()
bouton_sortir = Button(fen, text="Sortir", command=fen.destroy).pack()
forme=fond.create_polygon(10, 10, 10, 60, 50, 35)
for x in range(0, 100):
fond.move(forme, 5, 5)
fen.update()
time.sleep(0.05)
for x in range(0, 100):
fond.move(forme, -5, -5)
fen.update()
time.sleep(0.05)
fen.mainloop()
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !