L – Gestion du temps

publicité
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
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 1 er Janvier 1970.
Peu pratique pour avoir la date, mais permet de mesurer des intervalles de temps.
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
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)
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
Informatique et sciences du numérique
Lycée Pierre Émile Martin
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).
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
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
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()
Lycée Pierre Émile Martin
Téléchargement