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 :

Je ne trouve pas mon erreur avec after_cancel()


Sujet :

Tkinter Python

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    octobre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : octobre 2002
    Messages : 53
    Points : 74
    Points
    74
    Par défaut Je ne trouve pas mon erreur avec after_cancel()
    Bonjour,

    J'ai fait un tout petit bout de code pour que vous puissiez m'aider sans vous faire perdre votre temps.
    Merci d'avance.

    A l'execution du code je n'arrive pas à stopper la boucle, j'ai pourtant passer l'ID a after_cancel mais .....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    from tkinter import tix, Frame, Button, Label, Entry, Text, StringVar, messagebox
    from tkinter import *
    from tkinter.constants import *
     
    class Print(Frame):
        def __init__(self):
            Frame.__init__(self)
            self.i = 0
            self.boucle = None
            self.on_commence()
     
        def on_commence(self):
            print(self.i)
            self.i = self.i + 1
     
            if self.i == 5:
                self.termine()
     
            self.boucle = self.after(1000, self.on_commence)
     
        def termine(self):
            self.after_cancel(self.boucle)
            self.i = 0
            print("pourquoi ça n'arrete pas la boucle :",self.boucle)    
     
     
    if __name__=="__main__": 
     
     
        app = tix.Tk()
        essai= Print()
        app.mainloop()

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    18 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 18 681
    Points : 32 253
    Points
    32 253
    Par défaut
    Salut,

    Relisez votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        def on_commence(self):
            print(self.i)
            self.i = self.i + 1
     
            if self.i == 5:
                self.termine()
     
            self.boucle = self.after(1000, self.on_commence)
    self.termine s'applique à l'identifiant du "on_commence" qui est en train de s'exécuter pas de celui qui va être créé après: techniquement, il ne sert à rien.

    Autant écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        def on_commence(self, i = 0):
            print(i)
            if i < 5: 
                 self.after(1000, self.on_commence, i+1)
    plus court, moins de variables,...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    octobre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : octobre 2002
    Messages : 53
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par wiztricks
    self.termine s'applique à l'identifiant du "on_commence" qui est en train de s'exécuter pas de celui qui va être créé après
    Effectivement après relecture je me suis dit : "enfaite mon code pourrait fonctionner que si j'arrive à plier l'espace temps mais ..... "

    Merci wiztricks

Discussions similaires

  1. [MySQL] Je ne trouve pas mon erreur de syntaxe
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/04/2013, 17h33
  2. Je ne trouve pas l'erreur dans mon code
    Par true-life dans le forum Débuter
    Réponses: 4
    Dernier message: 25/04/2009, 11h40
  3. je ne trouve pas l'erreur dans mon programme
    Par Briska dans le forum Débuter
    Réponses: 19
    Dernier message: 04/04/2008, 10h21
  4. Réponses: 6
    Dernier message: 14/12/2006, 01h37
  5. Réponses: 4
    Dernier message: 10/08/2006, 14h44

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