3

PILを使用して画像をロードし、Tkinterによって作成されたウィンドウに表示する場合、非常に基本的なレベルで何かが欠けています。私がやろうとしていることの最も単純な形は次のとおりです。

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()を使用して表示できることを確認しました。私は何が欠けていますか?

4

2 に答える 2

6

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

TK.Tk()
于 2009-08-06T01:44:20.493 に答える
-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を使用するにはどうすればよいですか?

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

于 2013-02-21T07:19:07.923 に答える