web-dev-qa-db-ja.com

Tkinterエラー:画像ファイルのデータを認識できませんでした

Jpgイメージをtkinterキャンバスに配置しようとしています。 tkinterは私にこのエラーを与えます:

画像ファイルのデータを認識できませんでした

私はドキュメントのコードを使用します:

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)

PNG画像でも同じことが言えます。画像をラベルウィジェットに入れようとしましたが、同じエラーが発生しました。どうしましたか?

MacでPython 3を使用しています。 Pythonファイルと画像は同じフォルダーにあります。

9
Igor234

あなたのコードは正しいようです、これは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()

このtkinter GUIになります:

GUI この画像をbll.jpgとして: image

(imgurはbll.pngに変換しましたが、これは私にとっても機能しています。)


より多くのオプション:

  • この回答 言及、tkinterはgifイメージでのみ動作します。 .gifイメージを使用してみてください。
  • これが機能しない場合は、 この回答 に記載されているPILを使用します。

更新: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

私は同じ問題を抱えていました。私はウィンドウがあり、Python 3.6。だから私はあなたが.png画像に使用/変換するための2つの解決策を見つけました(あなたが使用したのと同じ関数で):

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

または、.jpgファイルのみを読み取りたい場合は、PILライブラリを使用して次のような画像を読み取り、表示します。

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

PIL/Pillowのインストール:

pip install Pillow

または:

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)

また、Tkinterでは.JPGではなく.PNGを使用することをお勧めします。

3
SF12 Study