Problème d'images

Résolu

Bonjoutr. J'ai un problème d'image gif avec tkinter. J'ai fait la meme chose que d'haibitude mais la ça ne marche pas...

# IMPORTS



from tkinter import *
import pickle
import time
from datetime import datetime





# INFOS



PCHIPath = "D:\Gwenneg"
PCHIFolder = "PCHI"
PCHIVersion = "Consolaire"
PCHIColor1 = "black"
PCHIColor2 = "white"
PCHIPolice = "Arial"





# FICHIERS



# Loads


PCHILoadGeneral = "D:\Gwenneg\Programmation\Python\\3-Repertoires\\1-PCHI\\1-PCHI Consolaire\PCHI\Sauvegarde\PCHIS.Sauve"





# VARIABLES



# Fenetres


PCHIFMenu = Tk()
PCHIFMenu.title("PCHI " + PCHIVersion + " Menu")
PCHIFMenu.iconbitmap()
PCHIFMenu.geometry("1600x900+-8+0")
PCHIFMenu.config(bg=PCHIColor1)





# FONCTIONS



# Importation

with open(PCHILoadGeneral, "rb") as f1:
    PCHISrest = pickle.load(f1)
    PCHINbDeProjetP1 = PCHISrest.get("PCHINbDeProjetP1")
    PCHIExp = PCHISrest.get("PCHIExp")









def PCHIFoIntro():

    PCHIFIntro = Tk()
    PCHIFIntro.geometry("500x250+550+300")
    PCHIFIntro.overrideredirect(1)

    PCHII = PhotoImage(file= "D:\Gwenneg\Programmation\Python\\3-Repertoires\\1-PCHI\\1-PCHI Consolaire\PCHI\Ressources\Images\Intro.gif")
    PCHILiIntro = Label(PCHIFIntro, image=PCHII)
    PCHILiIntro.pack()
    PCHIFIntro.update()
    time.sleep(3)
    PCHIFIntro.destroy()
    time.sleep(1)


        
def PCHIFoMenu():

    PCHICMenu = Canvas(PCHIFMenu, width=1600, height=270, bg=PCHIColor2)
    PCHICMenu.place(x=0, y=0)
    PCHILtMenu = Label(PCHICMenu, text="Pseudo Compilateur Hybride Infynyty", font=(PCHIPolice, 40), fg=PCHIColor1, bg=PCHIColor2)
    PCHILtMenu.place(x=375, y=100)
  

    PCHIFMenu.mainloop()






# SCENARIO



PCHIFoIntro()
PCHIFoMenu()

c'est au niveau de l'intro le problème

"C:\Program Files\Python311\python.exe" C:\Users\Gwenneg\PycharmProjects\PCHI\main.py 
Traceback (most recent call last):
  File "C:\Users\Gwenneg\PycharmProjects\PCHI\main.py", line 237, in <module>
    PCHIFoIntro()
  File "C:\Users\Gwenneg\PycharmProjects\PCHI\main.py", line 105, in PCHIFoIntro
    PCHILiIntro = Label(PCHIFIntro, image=PCHII)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\Python311\Lib\tkinter\__init__.py", line 3204, in __init__
    Widget.__init__(self, master, 'label', cnf, kw)
  File "C:\Program Files\Python311\Lib\tkinter\__init__.py", line 2628, in __init__
    self.tk.call(
_tkinter.TclError: image "pyimage1" doesn't exist

Process finished with exit code 1

Merci si vous m'aidez...


Que Notch soit avec vous

8 réponses

  1. Salut, histoire de référence, ton image est créée dans une fonction, ce qui fait que la référence à ton image n'est gardée nulle part, puisque détruite par python (Garbage Collector) après l'appel à cette fonction, voilà pourquoi tkinter te dit qu'il ne la trouve pas.

    De ce fait il est préférable de déclarer tes images hors fonctions et d'ailleurs d'en faire des constantes.

    0
    1. Contributeur Ambassadeur

      Si ton analyse est correcte, il suffit alors, je pense, de mémoriser cette référence en l'attachant à un objet persistant.  Pour compenser ce que tkinter néglige de faire.

      Je ne m'y retrouve pas dans les messages d'erreur avec le code incomplet partagé, donc, à tout hasard:

          PCHII = PhotoImage(file= "D:\Gwenneg\Programmation\Python\\3-Repertoires\\1-PCHI\\1-PCHI Consolaire\PCHI\Ressources\Images\Intro.gif")
          PCHILiIntro.MonImage=PCHII
          PCHILiIntro = Label(PCHIFIntro, image=PCHII)
      0
  2. Ok merci beaucoup. Pour faire les constantes, c'est bien

    Constante= 1
    Constante= Constante

    ?


    0
    1. Une constante est simplement en python une variable dont le nom est en majuscules.

      Ton code ne respecte pas les conventions en python.

      https://peps.python.org/pep-0008/#function-and-variable-names

      https://peps.python.org/pep-0008/#constants

      0
      1. Merci mais ayant testé, ça ne marche toujours pas. Toujours la même erreur...


        0
        1. Ca sert à quoi de créer 2 fenêtres principales (ligne 49 et ligne 80) ?

          Tu crée une fenêtre ligne 80, et tu la détruit aussitôt ligne 89 ?

          Quelle usine à gaz ! on se demande où tu veux en venir ...

          0
          1. C'est pour ma fenêtre d'intro.

            0
            1. On ne fait qu'un fenêtre Tk, si besoin d'autres fenêtres, alors il faut utiliser des Toplevel, l'erreur vient de ça, ton image est affiliée à l'autre fenêtre (la première déclarée). Tu epux tout de même spécifier le master (paramètre) lors de la création de ton image, mais il est préférable de revoir ton code en utilisant des toplevel.

              0
            2. @joubuplu

              Merci beaucoup, vous me sauvez...

              0
            3. Contributeur Ambassadeur
              @joubuplu

              Donc ceci fonctionnerait aussi:

                  PCHII = PhotoImage(master=PCHIFIntro ,
                           file= "D:\Gwenneg\Programmation\Python\\3-Repertoires\\1-PCHI\\1-PCHI Consolaire\PCHI\Ressources\Images\Intro.gif")
              
              0
            4. @yg_be

              Ok merci. Je ne savais pas qu'on pouvait mettre un master à une photoimage ;)

              0
          2. ca ne dit pas ce que tu veux faire exactement...

            0
            1. Je veux avoir une fenêtre d'introduction qui sera, selon les réactions de l'utilisateur, reafichée en même temps que la fenêtre principale. Il m'en faut donc deux.

              0