IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

effectuer une pause dans une boucle


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Points : 24
    Points
    24
    Par défaut effectuer une pause dans une boucle
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    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

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    L'affichage de la nouvelle configuration est effectué par quelles instructions, situées dans quel secteur de ton programme ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Points : 24
    Points
    24
    Par défaut ola!
    je suis sur que le problème ne vient pas de l'affichage, car si je me contente de cette methode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def lancer(self):
         self.etape()
    donc si j'effectue les étapes une par une, tout fonctionne à merveille.
    En fait, mon programme est divisée en 4 classes, donc 4 modules et pour expliquer exactement comment est gérer l'affichage, ce pourrait être long...
    la methode etape() fait appel à d'autres methodesqui gèrent les différents changements à effectuer...
    Mais je le répète, le problème ne vient pas de là...

  4. #4
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    A priori, il faut forcer le rafraichissement de la fenêtre à chaque étape

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while i<10 :
              self.etape()
              root.update() ## si ta fenêtre principale s'appelle root
              sleep(2)
              i+=1
    Le rafraichissement fait par Tkinter (ou autre GUI) ne se fait qu'à la fin de l'éxécution de la fonction principale (ici lancer) ou bien il faut forcer le rafraichissement régulièrement

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Points : 24
    Points
    24
    Par défaut
    alors là, chapeau... je ne m'attendais pas à ce que le problème vienne de Tkinter! Veillez m'excuser d'avoir douter de vous Guigui_!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo