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 :

problème de redémarrage de la fenêtre tkinter [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Collégien
    Inscrit en
    Août 2024
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Août 2024
    Messages : 13
    Par défaut problème de redémarrage de la fenêtre tkinter
    Bonjour, je voulais vous demander le cause de mon problème, lorsque je ferme la fenêtre tkinter, et que je réexécute le programme, voici ce qu'il m'indique :

    Code python : 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
    Traceback (most recent call last):
    File "C:/Users/Dell/Desktop/python/test 3.py", line 6, in <module>
    File "C:\Users\Dell\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py", line 2726, in __init__
    Widget.__init__(self, master, 'button', cnf, kw)
    File "C:\Users\Dell\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py", line 2648, in __init__
    self.tk.call(
    can't invoke "button" command: application has been destroyed
     
     
    programme:
    import tkinter as tk
    fen = tk.Tk()
    loop1 = 1
    while loop1 == 1:
     
        b1 = tk.Button(fen, text=("forme 1"), width=50)
     
        b1.pack(padx=10, pady=10)
        compteclick = 0
     
        def quandclické(event):
            global compteclick
            compteclick = compteclick + 1
            if compteclick ==1:
                #action
                fen.destroy()
     
     
        b1.bind("<ButtonRelease-1>", quandclické)
        fen.mainloop()
        #action



    merci d'avance.

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

    Dès qu'on exécute l'instruction fen.destroy(), on aura "application has been destroyed" dès qu'on essaie de modifier un widget.
    Quelque part, le code fait bien ce que vous avez demandé.
    Maintenant, si c'est n'importe quoi... trouvez un tuto. pour apprenez les bases de la programmation avec tkinter.
    Le Swinnen est très bien (pour débuter).

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

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par TristanTh Voir le message
    Bonjour, je voulais vous demander le cause de mon problème, lorsque je ferme la fenêtre tkinter, et que je réexécute le programme
    Déjà tu ne réexécutes pas ton programme, tu exécutes ton programme. Et ton programme, durant cette simple exécution unique, effectue une boucle. Et la boucle faisant appel à une fenêtre détruite à l'itération précédente... (déjà je ne vois pas ce que tu espérais obtenir à la place)

    Maintenant les défauts de ton code :
    • on ne définit pas une fonction dans une boucle (elle est réécrite à chaque itération !!!). D'ailleurs on définit traditionnellement les fonctions avant le code et pas au milieu du code (c'est plus lisible)
    • on évite les noms avec accent. Ce n'est pas un souci pour Python mais si on part dans les noms exotiques, on aura un jour des variables avec des noms style 野菜 ou ڜ. Donc on en reste aux caractères simples. Les verbes anglais sont pas mal pour ça
    • une boucle qui ne change pas sa variable de test est une boucle infinie. De là, la variable ne sert plus à rien


    Ci-dessous le même code (ne sachant pas ce que tu veux faire je ne peux que réécrire la même action) mais écrit plus dans la norme Python...
    Code python : 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
    def clicked(event):
    	global compteclick
    	compteclick = compteclick + 1
    	if compteclick ==1:
    		#action
    		fen.destroy()
     
    import tkinter as tk
    fen = tk.Tk()
    while True:
     
    	b1 = tk.Button(fen, text=("forme 1"), width=50)
     
    	b1.pack(padx=10, pady=10)
    	compteclick = 0
     
    	b1.bind("<ButtonRelease-1>", clicked)
    	fen.mainloop()
    	#action
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ci-dessous le même code (ne sachant pas ce que tu veux faire je ne peux que réécrire la même action) mais écrit plus dans la norme Python...
    Un code qui fait la même chose pourrait se résumer à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import tkinter as tk
     
    root = tk.Tk()
    tk.Button(root, text='forme 1', command=root.quit).pack()
    tk.mainloop()
    print("action")
    On affiche bien "action" dès le premier click sur le button en faisant disparaitre la fenêtre... et plus l'erreur "application has been destroyed" (même lorsqu'on "ferme" la fenêtre).

    Pour ce qui est de deviner ce que le PO a cherché à faire... on peut bien sûr imaginer mais c'est à priori un grand garçon qui devrait pouvoir s'exprimer...

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

  5. #5
    Membre averti
    Homme Profil pro
    Collégien
    Inscrit en
    Août 2024
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Août 2024
    Messages : 13
    Par défaut
    Merci énormément pour vos réponse, elle m'on beaucoup aidé, je vous suis très reconnaisant.
    Aurevoir

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

Discussions similaires

  1. [MFC] Priorité a une fentres CDialog
    Par Coubiac dans le forum MFC
    Réponses: 3
    Dernier message: 28/02/2005, 13h04
  2. [Tkinter] Binder le bouton de fermeture d'un Tk()
    Par jc_isd dans le forum Tkinter
    Réponses: 2
    Dernier message: 09/02/2005, 16h11
  3. Fermer la fentre sans quitter le programme?
    Par tomburn dans le forum OpenGL
    Réponses: 13
    Dernier message: 06/12/2004, 17h02
  4. Réponses: 3
    Dernier message: 26/10/2004, 07h31
  5. Réponses: 3
    Dernier message: 16/08/2004, 10h57

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