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 :

Evenement pendant une annimation


Sujet :

Tkinter Python

  1. #1
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut Evenement pendant une annimation
    Bonjour,
    Je développe un petit jeu, et j'ai besoins de récupérer les évenements pendant l'annimation.

    Voici la fonction qui s'occupe de l'annimation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def animate(self):
                    rayon = 700
                    while (rayon > 10):
                            l = self.maths.get_hexa(rayon, (400, 300))
                            rayon = rayon - 10
                            self.view.get_canvas().delete(ALL)
                            self.view.draw_poly(l, 20)
                            self.view.get_canvas().update()
                            self.view.get_canvas().after(20)
    J'ai ensuite fais 2 tests :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    self.main_canvas.bind("<Button-1>", print)
    Dans le premier cas, quand je clique sur mon canvas pendant l'annimation, j'ai bien l'évenement qui s'affiche dans la console, donc grace a cet exemple, je me rend compte que les evenements exterieurs sont pris en compte

    2eme exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    self.main_canvas.bind("<Button-1>", sys.exit)
    Dans le second cas, le probleme est que mon programme attends la fin de l'animation pour quitter (et n'affiche rien dans la console pendant l'annimation, juste a la fin de celle si).

    Pourquoi mon print est detecté avant la fin et non mon sys.exit() ? Et comment puis-je faire pour executer des actions pendant l'annimation ?

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    .bind permet d'associer un /callback/ a un evenement particulier.
    Un /callback/ est une fonction qui sera appelé par Tkinter et non par une autre de vos fonctions.
    Si le callback est sys.exit, ca se content de faire le raise d'un SystemExit et afficher des informations sur /stderr/.
    Comme Tkinter a fait le choix d'ignorer toutes les exceptions générées par un /callback/ via un block try:... except l'application continuera quelque soit l'erreur.
    note: c'est un choix, il n'est pas si mauvais. Mais ce n'est pas le sujet.

    Si le callback fait "print" ca va par défaut sut stdout.
    L'autre question serait "pourquoi les messages expédies a /stdout/ s'affichent en séquence avec ce qu'il se passe dans le programme alors que ce qui va sur /stderr/?"
    Je suspecte que vous faites vos tests depuis un IDE quelconque: si vous lanciez le programme depuis la console, vous n'auriez pas cette "étrangeté".

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

  3. #3
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut
    Bonjour,
    Je comprends votre message, hélas, je lance belle et bien mon programme via la console, via le shebang : #!/usr/bin/env python3J'ai lu dans ton message que tu disais que tkinter ignorait mon evements sys.exit, or, c'est un peu plus compliqué que ça, car il l'ignore que pendand l'animation.

    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par EpiTouille Voir le message
    J'ai lu dans ton message que tu disais que tkinter ignorait mon evements sys.exit, or, c'est un peu plus compliqué que ça, car il l'ignore que pendant l'animation.
    On fait ce qu'on peut avec les informations que vous ne donnez pas.
    Et la première est "un reproducteur".

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

  5. #5
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    On fait ce qu'on peut avec les informations que vous ne donnez pas.
    Bonjour cette info était précisée dans mon premier message

    Dans le second cas, le probleme est que mon programme attends la fin de l'animation pour quitter (et n'affiche rien dans la console pendant l'annimation, juste a la fin de celle si).

    Et la première est "un reproducteur".
    Que veux-tu dire par "la première" ?

    Bonne soirée

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    Je veux surtout dire un code minimal qui permette de reproduire vos soucis hors contexte applicatif.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. transmettre evenement d'une JFrame a un JPanel
    Par mereyj dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 18/06/2005, 18h52
  2. [SWING]Evenement global à une fenetre
    Par nicoo dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 03/05/2005, 12h05
  3. Réponses: 4
    Dernier message: 03/08/2004, 19h26
  4. Generation d'evenements a une date precise
    Par pascalzzz dans le forum MFC
    Réponses: 2
    Dernier message: 04/06/2002, 15h21

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