pythonのtkinterでpngファイルを読み込もうとしたらエラーが出た

2020年10月8日木曜日

Python

t f B! P L
次のようなコードでtkinterのPhotoImageにpngファイルを指定すると、couldn't recognize data in image file "./isono.png"というエラーが出ました。

import tkinter as tk
import tkinter.ttk as ttk
from PIL import Image
from PIL import ImageTk

im = tk.PhotoImage(file="./isono.png")

$ python3 pic.py 
Traceback (most recent call last):
  File "pic.py", line 225, in module
    main()
  File "pic.py", line 49, in main
    tab2_main(tab2)
  File "pic.py", line 116, in tab2_main
    im = tk.PhotoImage(file="./isono.png")
  File "/usr/lib64/python3.6/tkinter/__init__.py", line 3545, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "/usr/lib64/python3.6/tkinter/__init__.py", line 3501, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't recognize data in image file "./isono.png"
PhotoImageへのファイルの指定方法を変更すると、エラーが出るという問題は解決しないものの、エラーの内容は変わります。

import tkinter as tk
import tkinter.ttk as ttk
from PIL import Image
from PIL import ImageTk

im = tk.PhotoImage(Image.open"./isono.png")

$ python3 pic.py 
Traceback (most recent call last):
  File "pic.py", line 225, in module
    main()
  File "pic.py", line 49, in main
    tab2_main(tab2)
  File "pic.py", line 118, in tab2_main
    canvas.create_image(0, 0, image=im, anchor=tk.NW)
  File "/usr/lib64/python3.6/tkinter/__init__.py", line 2489, in create_image
    return self._create('image', args, kw)
  File "/usr/lib64/python3.6/tkinter/__init__.py", line 2480, in _create
    *(args + self._options(cnf, kw))))
TypeError: __str__ returned non-string (type PngImageFile)

原因

PhotoImageのライブラリが間違っていました。tkinterのPhotoImageではなく、PIL ImageTkのPhotoImageを使う必要がありました。

import tkinter as tk
import tkinter.ttk as ttk
from PIL import Image
from PIL import ImageTk

im = ImageTk.PhotoImage(file="./isono.png")

このブログを検索

ブログアーカイブ

QooQ