Python - pause dans une boucle

Fermé
guiguizekid Messages postés 70 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 22 février 2010 - 30 déc. 2008 à 16:53
 loulou1209 - 7 janv. 2015 à 21:05
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 samedi 5 janvier 2008 Statut Membre Dernière intervention 22 février 2010
30 déc. 2008 à 18:22
personne pour m'aider??
0
guiguizekid Messages postés 70 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 22 février 2010
30 déc. 2008 à 19:09
s'il vous plait! :'(
0
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
7 janv. 2015 à 12:06
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
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