Problème d'images

Résolu
Pr.Witherfire Messages postés 84 Statut Membre -  
 Pr.Witherfire -

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. joubuplu
     

    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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       

      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. Pr.Witherfire Messages postés 84 Statut Membre
     

    Ok merci beaucoup. Pour faire les constantes, c'est bien

    Constante= 1
    Constante= Constante

    ?


    0
  3. joubuplu
     

    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
  4. Pr.Witherfire Messages postés 84 Statut Membre
     

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


    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     

    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
  7. Pr.Witherfire
     

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

    0
    1. joubuplu
       

      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
      1. Pr.Witherfire > joubuplu
         

        Merci beaucoup, vous me sauvez...

        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > 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
      3. Pr.Witherfire > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         

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

        0
  8. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     

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

    0
  9. Pr.Witherfire
     

    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