Problème d'images

Résolu/Fermé
Pr.Witherfire Messages postés 79 Date d'inscription samedi 5 novembre 2022 Statut Membre Dernière intervention 25 février 2023 - 21 déc. 2022 à 14:22
 Pr.Witherfire - 22 déc. 2022 à 14:59

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


8 réponses

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
yg_be Messages postés 22752 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 mai 2024 1 477
Modifié le 21 déc. 2022 à 18:56

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
Pr.Witherfire Messages postés 79 Date d'inscription samedi 5 novembre 2022 Statut Membre Dernière intervention 25 février 2023
21 déc. 2022 à 16:07

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

Constante= 1
Constante= Constante

?


0

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
Pr.Witherfire Messages postés 79 Date d'inscription samedi 5 novembre 2022 Statut Membre Dernière intervention 25 février 2023
21 déc. 2022 à 16:22

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


0

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

Posez votre question
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
21 déc. 2022 à 16:42

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
Pr.Witherfire
21 déc. 2022 à 16:44

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

0

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
Pr.Witherfire > joubuplu
21 déc. 2022 à 17:04

Merci beaucoup, vous me sauvez...

0
yg_be Messages postés 22752 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 mai 2024 1 477 > joubuplu
21 déc. 2022 à 19:18

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
Pr.Witherfire > yg_be Messages postés 22752 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 mai 2024
22 déc. 2022 à 14:59

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

0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
21 déc. 2022 à 16:50

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

0
Pr.Witherfire
21 déc. 2022 à 16:59

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