2009-08-06 27 views
3

PILを使用してイメージをロードし、Tkinterによって作成されたウィンドウに表示する際に、非常に基本的なレベルで何かが欠けています。私は何をしようとしているの最も単純な形式は次のとおりです。TkinterでPILを使用するにはどうすればよいですか?

import Tkinter as TK 
from PIL import Image, ImageTk 

im = Image.open("C:\\tinycat.jpg") 
tkIm = ImageTk.PhotoImage(im) 
tkIm.pack() 
TK.mainloop() 

私は上記のコードを実行しようとすると、私は以下の取得:

RuntimeError: Too early to create image 
Exception AttributeError: "PhotoImage instance has no attribute 
'_PhotoImage__photo'" in <bound method PhotoImage.__del__ of 
<PIL.ImageTk.PhotoImage instance at 0x00C00030>> ignored 

私が確認したファイルが存在し、イメージエディタで開くことができ、im.show()を使用して表示することもできます。私は何が欠けていますか?

+0

[Python Tkinter Error、 "Too Early to to Create Image"]の複製が可能です。(http://stackoverflow.com/questions/10236857/python-tkinter-error-too-early-to-create-image) –

答えて

6

Tkinterのは、あなたがImageTk.PhotoImageを(呼び出す前)にインスタンス化する必要があります。

TK.Tk() 
-1

それはメレディスは、あなたは確かにその行を追加する必要が言ったことは非常に本当です!私はあなたに書式設定私の画像を表示し、あなたにそれを比較すると、画像のための任意の異なる、私のコードは

master.image = PhotoImage(file="Banditlogo.gif") 
w = Label(master, image=master.image) 
w.photo = master 
w.pack() 

で、あなたのコードが

im = Image.open("C:\\tinycat.jpg") 
tkIm = ImageTk.PhotoImage(im) 
tkIm.pack() 

あるがどうかを確認したいと思います

私たちはどちらもPhotoImageでPILを使用しています 両方の方法が正しいか不思議に思うのを助けることができませんか? 現時点では、PILの質問に完全に回答するための十分な知識がありませんが、違いがあるので両方のコードを比較するのは面白いです。人々が私と共有するサンプルコードに関しては、私がしていることを示唆することしかできません。「私がうまくいかない場合は、サンプルコードを試してコードが修正されているかどうかを確認してください」それと。

Tkinterをよく理解している方は、「TkinterでPILを使用するにはどうすればよいですか?

知識は力ですので、共有してください。

+0

@メレディスL.素晴らしい答えを得る。 –

関連する問題