Erreur dans code Tkinter

willow - Modifié le 29 juin 2023 à 16:27
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 30 juin 2023 à 11:50

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

A voir également:

7 réponses

Diablo76 Messages postés 153 Date d'inscription vendredi 25 novembre 2022 Statut Membre Dernière intervention 23 avril 2024 40
Modifié le 29 juin 2023 à 15:40

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)
1
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
28 juin 2023 à 16:29

bonjour,

bizarre, d'où vient ce nom, pyimage9?

0
Diablo76 Messages postés 153 Date d'inscription vendredi 25 novembre 2022 Statut Membre Dernière intervention 23 avril 2024 40
28 juin 2023 à 16:44

C'est une référence interne à Tcl 

0
Diablo76 Messages postés 153 Date d'inscription vendredi 25 novembre 2022 Statut Membre Dernière intervention 23 avril 2024 40
28 juin 2023 à 16:39

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()
0

merci beaucoup pour votre réponse, je vais essayer les doubles backslash, 

la seconde partie de code est à implanter dans mon code d'origine ? ou juste à executer dans un autre fichier à coté ?

0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 28 juin 2023 à 17:01

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()
0

Bonjour, merci beaucoup pour votre réponse, helas en prenant votre code et une image à moi, l'erreur apparait à nouveau

Tcl Error : "pyimage4" doesn't exist

0

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

Posez votre question

Jai 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()



0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
29 juin 2023 à 13:19

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

0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 29 juin 2023 à 13:30

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()
1
willow > Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024
29 juin 2023 à 15:08

Ca marche niquel avec le code que tu m'as refourni, en esperant que l'erreur ne resurgissent pas de nulle part comme elle l'avait fait au départ. 

Un grand merci à tous pour votre aide précieuse Phil et Diablo !!! <3  

0
willow > Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024
29 juin 2023 à 15:21

Fausse joie, après quelques ouverture de check, l'erreur Tcl réapparait...

0
Diablo76 Messages postés 153 Date d'inscription vendredi 25 novembre 2022 Statut Membre Dernière intervention 23 avril 2024 40 > willow
29 juin 2023 à 16:51

Ce qui pourrait-être intéressant quand l'erreur apparait, c'est de lancer le gestionnaire des tâches et dans l'onglet Processus voir combien d'instances de tk apparaissent.

1
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
30 juin 2023 à 11:50

Bonjour,

Par contre, si tu pouvais écrire accueil et non pas acceuil .... :-)

0