Python - pause dans une boucle

guiguizekid Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   -  
 loulou1209 -
Bonjour,
je crée un programme qui reproduit un mouvement en boucle dans un canvas Tkinter. L'utilisateur lance le prgramme, et peut observer l'évolution du mouvement (fourmi de langton pour ceux qui connaissent).
cependant, pour que ce mouvement soit visualisable, il faut que, entre les différentes étapes, l programme attendent et laissent le temps à l'utilisateur la nouvelle configuration.
j'ai essayer avec la fonction sleep du module time, mais, si le programme attend effectivement quelques secondes entre 2 étapes, il ne permet pas l'affichage de la nouvelle configuration!
en gros, le code de la methode ressemble à ça :
def lancer(self):
     # pour le teste, j'ai limité la boucle :
     i=0
     while i<10 :
          self.etape()
          sleep(2)
          i+=1

la succession d'étape est donc : etape, sleep, i+=1, etape, sleep, i+=1 ...
je crois que les caluls de etape suivi de i+=1 est telllement rapide que le canvas n'a pas le temps d'être mis à jour, et pendant le sleep, il ne se passe rien bien sûr!
donc le but recherché n'est pas atteint...
pourriez vou sm'aider?
merci d'avance

5 réponses

guiguizekid Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
personne pour m'aider??
0
guiguizekid Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
s'il vous plait! :'(
0
loulou1209
 
le problème c'est que les canvas ne s'actualisent qu'au retour a la boucle mainloop c'est a dire que ton dessin ne s'affiche qu'une fois le sous programme terminé
0
Utilisateur anonyme
 
Il faut forcer l'actualisation du canvas à l'aide de la méthode update_idletasks.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
loulou1209
 
sinon tu peux utiliser la commande after() qui permet d'exexuter une commande apres un certain temps

i=0
def lancer(self):
# pour le teste, j'ai limité la boucle :

i+=1
self.etape()
if i<10 :
fenetre.after(50, self)
http://fsincere.free.fr/isn/python/cours_python_tkinter.php
0