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 :

_tkinter.TclError: image "pyimage2" doesn't exist"


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2018
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2018
    Messages : 24
    Points : 11
    Points
    11
    Par défaut _tkinter.TclError: image "pyimage2" doesn't exist"
    Bonjour, je cherche à créer une classe pour améliorer mon programme, j'apprend donc à travers plusieurs tutoriels que j'essaye d'adapter sur mon programme mais pas facile car je travaille avec tkinter !! Je ne comprend pas j'ai créer une classe mère et une classe fille, mais mon programme ne fonctionne pas. Mes fenêtres s'ouvrent mais lorsque je clique sur play pour ouvrir la fenêtre de jeu, l'image ne s'affiche pas, la fenêtre est blanche. Voici le message d'erreur " *(args + self._options(cnf, kw))))
    _tkinter.TclError: image "pyimage2" doesn't exist"
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    import tkinter as tk
    import os
    from PIL import Image, ImageTk
     
    #Chemin pour les images
    script_dir = os.path.dirname(__file__)
    rel_path = "/images/"
    abs_file_path = script_dir + rel_path
     
    #Fenêtre instructions
    def FenetreInstructions(): 
        fenetreinstructions=tk.Tk()
        titre2=tk.Label(fenetreinstructions, text="INSTRUCTIONS AU JEU")
        titre2.pack()
        fenetreinstructions()
     
    #Création de la fenêtre d'introduction
    class FenetreIntro(tk.Frame):
        def __init__(self):
            self.fenetreintro = tk.Tk()
            self.label = tk.Label(self.fenetreintro, text="Wanted")
            self.label.pack()
            self.canvas=tk.Canvas(self.fenetreintro, width=800, height=500, background='white')
            self.canvas.pack()    
     
            self.photo = Image.open(abs_file_path+"wanted.jpeg")
            self.photowanted = ImageTk.PhotoImage(self.photo)
            self.wanted=self.canvas.create_image(400, 200, image=self.photowanted)
     
            self.bouton1=tk.Button(self.fenetreintro, text="PLAY", command=FenetreJeu)
            self.bouton1.pack()
     
            self.bouton2=tk.Button(self.fenetreintro, text="Instructions", command=FenetreInstructions)
            self.bouton2.pack()
     
            self.bouton3=tk.Button(self.fenetreintro, text="Quitter", command=self.fenetreintro.destroy)
            self.bouton3.pack()
     
            self.fenetreintro.mainloop()
     
    #Fenêtre jeu
    class FenetreJeu(FenetreIntro):
        def __init__(self):
            tk.Frame.__init__(self)
            self.fenetrejeu = tk.Tk()  
            self.titre1 = tk.Label(self.fenetrejeu, text="Wanted-Jeu")  
            self.titre1.pack() 
            self.Minuteur=tk.Label(self.fenetrejeu,text="60")   
            self.Minuteur.pack()  
            self.canvasjeu=tk.Canvas(self.fenetrejeu, width=800, height=800, background='white')  
            self.canvasjeu.pack()  
     
            self.image = Image.open(abs_file_path+"clarys2.png")  
            self.photoclarys2 = ImageTk.PhotoImage(self.image)
            self.canvasjeu.create_image(500,150, image=self.photoclarys2) 
     
            self.fenetrejeu.mainloop() 
     
    f = FenetreIntro()

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Plusieurs instances Tk, interdit ! Voir les bonnes pratiques...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre à l'essai
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2018
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2018
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Plusieurs instances Tk, interdit ! Voir les bonnes pratiques...
    Je ne comprends pas??

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 784
    Points : 7 043
    Points
    7 043
    Par défaut
    C'est simple, ligne 12, 20 et 45 vous créez une instance Tk, donc 3 interpréteurs tcl ce qui est inconcevable, car vous devez gérer 3 boucles d'évènements (mais c'est absolument ingérable).

    Pour créer une fenêtre secondaire, il vous faut utiliser une autre classe nommée Toplevel.
    Tout cela est indiqué dans le lien que je propose précédemment.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    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 235
    Points : 36 684
    Points
    36 684
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    C'est simple, ligne 12, 20 et 45 vous créez une instance Tk, donc 3 interpréteurs tcl ce qui est inconcevable, car vous devez gérer 3 boucles d'évènements (mais c'est absolument ingérable).
    Pour être précis, çà crée 3 espaces de noms (mais une seule boucle d'évènements). Ce que traduit le message _tkinter.TclError: image "pyimage2" doesn't exist". Et qui pourrait être éviter en précisant cet espace de nom avec PhotoImage(..., master=...)
    Citation Envoyé par KROCLARYS Voir le message
    Je ne comprends pas??
    Les bonnes pratiques sont juste des règles à appliquer sans avoir à faire l'effort de comprendre.
    Si vous cherchiez à comprendre, vous auriez essayer de reproduire le problème sans utiliser de classes, constaté qu'il était identique et ouvert cette discussion dans le forum tkinter ou trouvé la solution avec un peu de recherche sur Internet ou de lecture de la documentation qui vous explique qu'il y a différents types de fenêtres.

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

  6. #6
    Membre à l'essai
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2018
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2018
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    J'ai décidé d'abandonner les classes, trop compliqué pour mon petit niveau, je me débrouille donc sans. Merci pour vos réponses.

Discussions similaires

  1. Problème sur les variables de class
    Par nico_pouchet dans le forum VB.NET
    Réponses: 6
    Dernier message: 11/06/2007, 17h51
  2. [ezPDF] Installation classe EZpdf sur Easyphp2.01beta
    Par Shyboy dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 30/04/2007, 02h15
  3. Réponses: 4
    Dernier message: 15/10/2006, 19h05
  4. Problème de pointeurs sur classe
    Par fabiin dans le forum Delphi
    Réponses: 1
    Dernier message: 05/08/2006, 19h13
  5. Problème sur classe Transformer avec les <!--
    Par tykool dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/01/2006, 11h20

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