2017-08-14 2 views
1

この質問は既に何回か尋ねられていますが、私はまだ私の問題の答えを把握できませんでした。私は同じエラーが発生し続けており、解決方法はわかりません。_tkinter.TclError:image "..."は存在しません

これは私のコードです:

from Tkinter import * 
from PIL import Image, ImageTk 
import os 

window = Tk() 
i = Image.open(pathToImage) 
if os.path.isfile(pathToImage): 

    print 'image exists' 
else: 
    print 'image does not exits' 

label=Label(window, image=i) 
label.pack() 
window.mainloop() 

それは画像が示されたパスに存在するが、私はこのエラーメッセージ取得しておくことを言う:

Traceback (most recent call last): 
    File "ImageTest.py", line 31, in <module> 
    label=Label(window, image=i) 
    File "C:\Users\username\Anaconda2\lib\lib-tk\Tkinter.py", line 2597, in __init__ 
Widget.__init__(self, master, 'label', cnf, kw) 
    File "C:\Users\username\Anaconda2\lib\lib-tk\Tkinter.py", line 2096, in __init__ 
(widgetName, self._w) + extra + self._options(cnf)) 
_tkinter.TclError: image "<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=640x480 at 0x36DF278>" doesn't exist 

を私が解決する方法を見つけ出すことができませんでしたこの問題。どんな助けもありがとう!

答えて

2

PhotoImageインスタンスをimage値として使用する必要があります。また、画像の参照を保持する必要があります。

im = Image.open(pathToImage) 
ph = ImageTk.PhotoImage(im) 

label = Label(window, image=ph) 
label.image=ph #need to keep the reference of your image to avoid garbage collection 
+0

大変ありがとうございます! – anonymous

+0

なぜ参照を保持する必要がありますか?それは "show()、configure()など"のような使い方の後に "消費"されますか?私はそのメカニズムを理解していない。 – Semo

+1

@セモ[This effbot link](http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm)は、私ができるよりも優れたコンセプトについて説明しています。 – Lafexlos

関連する問題