Problème liste s'il vous plaît !!

KRO - 9 mai 2018 à 13:59
 KRO - 9 mai 2018 à 20:37
Bonjour, j'ai un problème depuis plusieurs jours impossible de trouver une solution.... Je parcours les tutos, les forums mais rien n'y fait...

import tkinter as tk
import os
from PIL import Image, ImageTk
 
root = tk.Tk()
 
dx = tk.IntVar()
dy = tk.IntVar()
 
canvas=tk.Canvas(root, width=500, height=400, bg='white')
canvas.pack(padx=10,pady=10)
 
#Chemin pour les images
script_dir = os.path.dirname(__file__)
rel_path = "/images/"
abs_file_path = script_dir + rel_path
 
images = [0]*12
noms = ["clarys", "baptiste", "anais", "allan", "arnold", "thomas", "ayoub", "caroline", "deborah", "louis", "paul", "nono"]
 
for i in range(12):
    images[i] = Image.open(abs_file_path + noms[i] + ".png")
    photo = ImageTk.PhotoImage(images)
    canvas.create_image(180,0,image=photo)
     
for uneimage in images:
    dx.set(0)
    dy.set(5)
    if canvas.coords(uneimage)[1]>400 :
       canvas.coords(uneimage,180,0)
    canvas.move(uneimage,dx.get(),dy.get())
  
root.mainloop()


Voici mon message d'erreur :

File "/Users/FamilleDude/anaconda3/lib/python3.6/site-packages/PIL/ImageMode.py", line 55, in getmode
return _modes[mode]
TypeError: unhashable type: 'list'

Je suis complètement perdue si quelqu'un sait m'aider ça serait géniale !!

1 réponse

Mints Messages postés 69 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 juin 2018 7
9 mai 2018 à 20:11
Bonsoir,

alors oui tkinter ne gère pas le format 'png' et on est donc obligé d'utiliser la bibliothèque PIL pour le rendre compatible.
La procédure consiste à fournir un fichier png à la méthode ImageTk.PhotoImage() , or ici vous fournissez la variables 'images' qui n'est pas un fichier image mais une liste.
Ensuite vous créez des objets image dont vous ne conservez pas l'id, or vous en aurez besoin rien que pour leur déplacement prévu dans la partie 2 de votre code.

Je vous conseille donc d'écrire:
    image = Image.open(abs_file_path + noms[i] + ".png")
    photo = ImageTk.PhotoImage(image)
    images[i] = canvas.create_image(180,0,image=photo)



--
0
Bonsoir, merci de ta réponse, j'ai enfait trouvé une solution au problème sur la première partie du code, avant que tu ne me répondes :
import tkinter as tk
import os
from PIL import Image, ImageTk
 
root = tk.Tk()
 
dx = tk.IntVar()
dy = tk.IntVar()
 
canvas=tk.Canvas(root, width=500, height=400, bg='white')
canvas.pack(padx=10,pady=10)
 
#Chemin pour les images
script_dir = os.path.dirname(__file__)
rel_path = "/images/"
abs_file_path = script_dir + rel_path
 
images = []
noms = ["clarys", "baptiste", "anais", "allan", "arnold", "thomas", "ayoub", "caroline", "deborah", "louis", "paul", "nono"]
 
for i in range(12):
    images.append(Image.open(abs_file_path + noms[i] + ".png"))
    images[i] = ImageTk.PhotoImage(images[i])
    canvas.create_image(180,0,image=images[i])

for uneimage in images:
    dx.set(0)
    dy.set(5)
    if canvas.coords(uneimage)[1]>400 :
       canvas.coords(uneimage,180,0)
    canvas.move(uneimage,dx.get(),dy.get())
  
root.mainloop()


Cependant, comment dois-je m'y prendre pour la deuxième partie du programme ? Merci de votre aide.
0
Rejoignez-nous