Problème d'images
RésoluPr.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
-
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.
-
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)
-
-
Ok merci beaucoup. Pour faire les constantes, c'est bien
Constante= 1 Constante= Constante
?
-
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
-
Merci mais ayant testé, ça ne marche toujours pas. Toujours la même erreur...
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 ...
-
-
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.
-
-
ca ne dit pas ce que tu veux faire exactement...
-
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.