it-swarm.com.de

Tkinter-Fehler: Daten in Bilddatei konnten nicht erkannt werden

Ich versuche, ein JPG-Bild auf eine Tkinter-Leinwand zu bringen. tkinter gibt mir diesen Fehler:

konnte keine Daten in der Bilddatei erkennen

Ich benutze den Code aus der Dokumentation:

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)

Gleiches gilt für PNG-Bilder. Es wurde sogar versucht, ein Bild in ein Label-Widget einzufügen, aber der gleiche Fehler wurde gemeldet. Was ist falsch?

Ich verwende Python 3 auf Mac. Python Datei und Bild befinden sich im selben Ordner.

9
Igor234

Ihr Code scheint richtig zu sein, dies läuft für mich unter 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()

daraus ergibt sich folgende tkinter GUI:

GUI mit diesem Bild als bll.jpg: image

(imgur konvertierte es zu bll.png aber das funktioniert auch bei mir.)


Mehr Optionen:

  • Diese Antwort erwähnt, dass tkinter nur mit gif Bildern arbeitet. Versuchen Sie es mit einem .gif Bild.
  • Wenn dies nicht funktioniert, verwenden Sie PIL wie in diese Antwort angegeben.

Update: Lösung mit 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

Ich bekam das gleiche Problem. Ich habe Windows und Python 3.6. Also habe ich zwei Lösungen für dieses Bild gefunden, entweder Sie verwenden/in .png Umwandeln (mit der gleichen Funktion, die Sie verwendet haben):

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

oder wenn Sie nur die .jpg - Datei lesen möchten, verwenden Sie die PIL-Bibliothek, um ein Bild wie das folgende zu lesen und anzuzeigen:

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

Installieren Sie PIL/Pillow mit:

pip install Pillow

oder:

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)

Für Tkinter ist es besser, .PNG anstelle von .JPG zu verwenden.

3
SF12 Study