Erreur dans code Tkinter
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis en train de créer une interface graphique, et au début de mon programme, j'ai déjà des messages d'erreur bizarres. J'ai essayé anaconda, spyder, ainsi que VsCode mais rien n'y fait. Quelqu'un saurait-il m'aider ?
L'erreur en question est :"TclError: image "pyimage9" doesn't exist". Par moment l'interface correctement, et à l'essai d'après, elle réapparaît.
Bien entendu, l'image est dans le même répertoire que le fichier py, et l'erreur persiste même en spécifiant le chemin d'accès
Voici mon code :
import tkinter as tk from tkinter.filedialog import * from PIL import Image, ImageTk virvolt = tk.Tk() # Taille de la fenêtre virvolt.geometry("350x600") # Logo logo = ImageTk.PhotoImage(file="C:\HDD\DATA\ESME\INGE2\Stage\Virvolt\logopourvirvolt.png") acceuil = tk.Canvas(virvolt, width=240, height=50) acceuil.create_image(150, 30, image=logo) acceuil.pack() # Les 3 boutons pour choisir le programme : b1 = tk.Button(virvolt, text='programme Soft') b2 = tk.Button(virvolt, text='programme medium') b3 = tk.Button(virvolt, text='programme sport') b1.pack() b2.pack() b3.pack() virvolt.mainloop()
Merci à tous par avance
Windows / Chrome 114.0.0.0
- _tkinter.tclerror: image "pyimage4" doesn't exist
- Code ascii - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code blocks - Télécharger - Langages
7 réponses
J'ai vu sur le net que certains avaient corrigé le problème en précisant le master dans PhotoImage()
À tester :
logo = ImageTk.PhotoImage(im, master=virvolt)
bonjour,
bizarre, d'où vient ce nom, pyimage9?
Salut,
Déjà, je doublerai les anti-slash :
ImageTk.PhotoImage(file="C:\\HDD\\DATA\\ESME\\INGE2\\Stage\\Virvolt\\logopourvirvolt.png")
L'une des raisons pourrait être que plusieurs instances de Tk() sont toujours en mémoire surement parce qu'elles ont probablement planté avant le mainloop().
Si c'est bien le cas, il suffit d'exécuter le code ci-dessous et de fermer toutes les fenêtres Tkinter qui apparaissent :
import tkinter as tk root = tk.Tk() root.mainloop()
Bonjour,
Ca doit marcher, normalement (ici avec une image de mon cru) :
import tkinter as tk from tkinter.filedialog import * from PIL import Image, ImageTk main_win = tk.Tk() main_win.geometry("350x300") accueil = tk.Canvas(main_win, width=240, height=150) accueil.pack() im = Image.open("stone.jpg") logo = ImageTk.PhotoImage(im) accueil.create_image(10, 10, anchor = NW, image=logo) tk.Button(main_win, text='programme soft').pack() tk.Button(main_win, text='programme medium').pack() tk.Button(main_win, text='programme sport').pack() main_win.mainloop()
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJai d'ailleurs changé de manière d'importation, je vous fournis mon code mis à jour pour plus de précisions la partie posant problème est laissée en commentaire à la fin :
# -*- coding: utf-8 -*- """ Created on Wed Jun 28 14:56:00 2023 @author: """ from tkinter import * from tkinter.ttk import * from tkinter.filedialog import * from PIL import Image, ImageTk virvolt = Tk() virvolt.geometry('360x600') virvolt.minsize(width=360, height=600) virvolt.configure(bg='#012AFF') #boutons b1= Button(virvolt, text='Assistance faible',) b2= Button(virvolt, text='Assistance medium') b3= Button(virvolt, text='Assistance haute') # Fonction pour ajuster la position des boutons en fonction de la taille de la fenêtre def position_boutons(event=None): window_width = virvolt.winfo_width() window_height = virvolt.winfo_height() b3_width = b3.winfo_width() b2_width = b2.winfo_width() b3_x = window_width - b3_width b2_x = (window_width - b2_width)//2 # Calcul des nouvelles coordonnées des boutons en fonction de la taille de la fenêtre b1_x = int(window_width * 0) b1_y = int(window_height * 0.95) b2_y = int(window_height * 0.95) b3_y = int(window_height * 0.95) # Définition des nouvelles coordonnées des boutons b1.place(x=b1_x, y=b1_y) b2.place(x=b2_x, y=b2_y) b3.place(x=b3_x, y=b3_y) # Événement de redimensionnement de la fenêtre pour ajuster la position des boutons virvolt.bind('<Configure>', position_boutons) # Premier ajustement de la position des boutons lors du démarrage virvolt.update() position_boutons() style = Style() style.configure('TButton', font = ('calibri', 11, 'bold'), borderwidth = '4') # Changes will be reflected # by the movement of mouse. style.map('TButton', foreground = [('active', '!disabled', '#4ABD00')], background = [('active', 'black')]) """ #logo logo = PhotoImage(file="virvoltlogo.png") acceuil=Canvas(virvolt, width=175, height=45) acceuil.create_image(0,0,anchor=NW, image=logo) acceuil.pack()""" virvolt.mainloop()
Bonjour,
OK, mais pourrais-tu simplement copier/coller les 19 lignes mon code tel qu'il est
sans rien y changer, sauf le nom de l'image, car je vois qu'il te manque la ligne
Image.open():
im = Image.open("virvoltlogo.png") logo = ImageTk.PhotoImage(im) accueil.create_image(10, 10, anchor = NW, image=logo)
Tu fais exactement ça et tu me dis ce que ça donne
ton code dans un ordre plus logique et regarde bien les lignes 42,43,44
# -*- coding: utf-8 -*- """ Created on Wed Jun 28 14:56:00 2023 @author: """ from tkinter import * from tkinter.ttk import * from tkinter.filedialog import * from PIL import Image, ImageTk def position_boutons(event=None): ''' ajuste la position des boutons en fonction de la taille de la fenêtre ''' window_width = virvolt.winfo_width() window_height = virvolt.winfo_height() b3_width = b3.winfo_width() b2_width = b2.winfo_width() b3_x = window_width - b3_width b2_x = (window_width - b2_width)//2 # Calcul des nouvelles coordonnées des boutons en fonction de la taille de la fenêtre b1_x = int(window_width * 0) b1_y = int(window_height * 0.95) b2_y = int(window_height * 0.95) b3_y = int(window_height * 0.95) # Définition des nouvelles coordonnées des boutons b1.place(x=b1_x, y=b1_y) b2.place(x=b2_x, y=b2_y) b3.place(x=b3_x, y=b3_y) virvolt = Tk() virvolt.geometry('360x600') virvolt.minsize(width=360, height=400) virvolt.configure(bg='#012AFF') accueil=Canvas(virvolt, width=175, height=45) accueil.pack() im = Image.open("virvoltlogo.png") logo = ImageTk.PhotoImage(im) accueil.create_image(0,0,anchor=NW, image=logo) b1= Button(virvolt, text='Assistance faible',) b2= Button(virvolt, text='Assistance medium') b3= Button(virvolt, text='Assistance haute') virvolt.bind('<Configure>', position_boutons) virvolt.update() position_boutons() style = Style() style.configure('TButton', font = ('calibri', 11, 'bold'), borderwidth = '4') style.map('TButton', foreground = [('active', '!disabled', '#4ABD00')], background = [('active', 'black')]) virvolt.mainloop()