web-dev-qa-db-fra.com

Erreur Tkinter: impossible de reconnaître les données du fichier image

J'essaie de mettre une image jpg sur une toile tkinter. tkinter me donne cette erreur:

n'a pas pu reconnaître les données du fichier image

J'utilise le code de la documentation:

canv = Canvas(root, width=80, height=80, bg='white')
canv.grid(row=2, column=3)

img = PhotoImage(file="bll.jpg")
canv.create_image(20,20, anchor=NW, image=img)

Même chose avec les images png. Même essayé de mettre une image dans un widget d'étiquette, mais a obtenu la même erreur. Qu'est-ce qui ne va pas?

J'utilise Python 3 sur Mac. Python et l'image sont dans le même dossier.

9
Igor234

Votre code semble correct, cela fonctionne pour moi sur Windows 7 (Python 3.6):

from tkinter import *
root = Tk()

canv = Canvas(root, width=80, height=80, bg='white')
canv.grid(row=2, column=3)

img = PhotoImage(file="bll.jpg")
canv.create_image(20,20, anchor=NW, image=img)

mainloop()

résultant en cette interface graphique tkinter:

GUI avec cette image comme bll.jpg: image

(imgur l'a converti en bll.png mais cela fonctionne aussi pour moi.)


Plus d'options:

  • Cette réponse mentionne, tkinter ne fonctionne qu'avec les images gif. Essayez d'utiliser un .gif image.
  • Si cela ne fonctionne pas, utilisez PIL comme indiqué dans cette réponse .

Mise à jour: Solution avec PIL:

from tkinter import *
from PIL import ImageTk, Image
root = Tk()

canv = Canvas(root, width=80, height=80, bg='white')
canv.grid(row=2, column=3)

img = ImageTk.PhotoImage(Image.open("bll.jpg"))  # PIL solution
canv.create_image(20, 20, anchor=NW, image=img)

mainloop()
7
bastelflp

J'obtenais le même problème. J'ai des fenêtres et Python 3.6. J'ai donc trouvé deux solutions pour cela soit vous utilisez/convertissez en .png image (avec la même fonction que vous avez utilisée):

photo = PhotoImage('xyz.png')
l = Label(image = photo)
l.pack()

ou si vous voulez lire .jpg fichier uniquement, puis utilisez la bibliothèque PIL pour lire et afficher une image comme celle-ci:

from PIL import ImageTk, Image
img = ImageTk.PhotoImage(Image.open("xyz.jpg"))  
l=Label(image=img)
l.pack()
5
Nachiket

Installez PIL/Oreiller avec:

pip install Pillow

ou:

Sudo pip install pillow
from PIL import Image
from PIL import ImageTk
import tkinter

image = Image.open('bll.jpg')
image = image.resize((20, 20))
image = ImageTk.PhotoImage(image)

canv = Canvas(root, width=80, height=80, bg='white')
canv.grid(row=2, column=3)

img = PhotoImage(file=image)

L'utilisation de .PNG au lieu de .JPG est également préférable pour Tkinter.

3
SF12 Study