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

Python Discussion :

(tkinter) Derni�re instruction non ex�cut�e avant sortie fen�tre [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2018
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Mars 2018
    Messages : 5
    Par d�faut (tkinter) Derni�re instruction non ex�cut�e avant sortie fen�tre
    Bonjour � tous, nouveau venu sur le forum, je voudrais �tre �clair� sur un probl�me simple qui me r�siste.
    (Je n'ai pas trouv� dans les recherches de sujet similaire).
    Je prendrai l' exemple ci-dessous.
    Sans l'instruction fen.quit(), Le code affiche dans la fen�tre les coordonn�es de la souris o� je clique, et si je clique dans la zone SE, il m'affiche bien le texte 'A bient�t'.
    Mais si j'active le fen.quit() derri�re, alors le texte 'A bient�t' ne s'affiche pas avant que la fen�tre se ferme.
    Est-ce un probl�me de rafra�chissement ?
    D'avance, merci.

    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
     
    from tkinter import *
     
    def pointeur(event):
        chaine.configure(text = "Clic détecté en X =" + str(event.x) +", Y =" + str(event.y))
        if event.x>180 and event.y>130:
            text=Label(fen,text='A bientôt')
            text.grid(row=2)
            #fen.quit()
     
     
     
    fen = Tk()
     
    cadre = Canvas(fen, width =200, height =150, bg="light yellow")
    cadre.bind("<Button-1>", pointeur)
    cadre.grid()
    chaine = Label(fen)
    chaine.grid(row=1)
     
    fen.mainloop()
    fen.after(1500)
    fen.destroy()

  2. #2
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    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 770
    Par d�faut
    Salut,

    Citation Envoy� par Milag Voir le message
    Mais si j'active le fen.quit() derri�re, alors le texte 'A bient�t' ne s'affiche pas avant que la fen�tre se ferme.
    Est-ce un probl�me de rafra�chissement ?
    Une autre fa�on de voir les choses est que �� s'affiche trop peu de temps pour �tre vu.
    En fait, .quit fait sortir de l'appel � mainloop. Ajoutez un time.sleep(...) juste apr�s et vous aurez l'effet recherch�.

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2018
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Mars 2018
    Messages : 5
    Par d�faut
    Merci, je n'avais pas pens� � �a.
    Par contre j'ai essay� un time.sleep() de 2 secondes apr�s mon texte '� bient�t', avant ou apr�s le .quit() (et m�me avant ou apr�s le .mainloop()) mais rien n'y fait, il ne m'affiche toujours pas le 'A bient�t' dans la version o� le .quit est activ�. Etrange.

  4. #4
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    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 770
    Par d�faut
    Citation Envoy� par Milag Voir le message
    Merci, je n'avais pas pens� � �a.
    Par contre j'ai essay� un time.sleep() de 2 secondes apr�s mon texte '� bient�t', avant ou apr�s le .quit() (et m�me avant ou apr�s le .mainloop()) mais rien n'y fait, il ne m'affiche toujours pas le 'A bient�t' dans la version o� le .quit est activ�. Etrange.
    Il faut �viter les time.sleep dans les callbacks... apr�s mainloop �� devrait fonctionner. Maintenant, il faut poster le code pour voir dans quel pi�ge vous �tes tomb� (ou si j'ai bien compris votre probl�me).

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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2018
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Mars 2018
    Messages : 5
    Par d�faut
    Voici l'essai avec .sleep apr�s .mainloop : il me donne toujours, d�s que je clique dans la zone de sortie, une fen�tre qui se maintient 2 s avec uniquement les derni�res coord. affich�es et pas de message '� bient�t' :
    (si je d�sactive le .quit le message appara�t bel et bien)

    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
     
    from tkinter import *
    import time
     
    def pointeur(event):
        chaine.configure(text = "Clic détecté en X =" + str(event.x) +", Y =" + str(event.y))
        if event.x>180 and event.y>130:
            text=Label(fen,text='A bientôt')
            text.grid(row=2)
            fen.quit()
     
     
     
     
    fen = Tk()
     
    cadre = Canvas(fen, width =200, height =150, bg="light yellow")
    cadre.bind("<Button-1>", pointeur)
    cadre.grid()
    chaine = Label(fen)
    chaine.grid(row=1)
     
    fen.mainloop()
    time.sleep(2)
    #fen.after(500)
    fen.destroy()

  6. #6
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    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 770
    Par d�faut
    ah oui, tkinter est paresseux, il ex�cute le .quit en oubliant le reste � faire.
    Ajoutez juste un fen.update_idletasks() entre .mainloop et time.sleep.

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

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2018
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Mars 2018
    Messages : 5
    Par d�faut
    Yes ! Ca fonctionne enfin !

    Voici le code fonctionnel, (j'en profite pour �viter le module time) :

    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
     
    from tkinter import *
    #import time
     
    def pointeur(event):
        chaine.configure(text = "Clic détecté en X =" + str(event.x) +", Y =" + str(event.y))
        if event.x>180 and event.y>130:
            text=Label(fen,text='A bientôt')
            text.grid(row=2)
            fen.quit()
     
     
     
     
    fen = Tk()
     
    cadre = Canvas(fen, width =200, height =150, bg="light yellow")
    cadre.bind("<Button-1>", pointeur)
    cadre.grid()
    chaine = Label(fen)
    chaine.grid(row=1)
     
    fen.mainloop()
    fen.update_idletasks()
    #time.sleep(2)
    fen.after(500)
    fen.destroy()

    Est-ce � dire que tkinter ne serait pas si bien impl�ment� que �a ? Et merci encore !

  8. #8
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    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 770
    Par d�faut
    Salut,

    Vous pourriez simplifiez tout �� en �crivant:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    def pointeur(event):
        chaine.configure(text = "Clic détecté en X =" + str(event.x) +", Y =" + str(event.y))
        if event.x>180 and event.y>130:
            text=Label(fen,text='A bientôt')
            text.grid(row=2)
            fen.after(500, fen.quit)
    Dans ce cas, comme il vide ce qu'il y a en attente avant de sortir pas besoin d'�crire des instructions apr�s la sortie de mainloop.

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

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2018
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Mars 2018
    Messages : 5
    Par d�faut
    Effectivement, cela fonctionne parfaitement. Une option int�ressante de la m�thode .after que je n'avais pas assez fouill�e. Merci une fois encore. Le code est bien plus propre ainsi.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Partenaire] Chrysalis RPG - derni�re phase avant sortie!
    Par pchambon dans le forum Autres
    R�ponses: 0
    Dernier message: 30/06/2013, 21h15
  2. onAction - instructions non ex�cut�es
    Par RaoulPierre dans le forum Macros et VBA Excel
    R�ponses: 3
    Dernier message: 05/04/2012, 09h56
  3. R�ponses: 0
    Dernier message: 25/04/2008, 09h56
  4. R�ponses: 2
    Dernier message: 15/12/2007, 16h52
  5. instruction non ex�cut�e
    Par illegalsene dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 09/05/2006, 14h42

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