2011-01-31 16 views
4

PILを使用してTkinterキャンバスに画像を埋め込もうとしていますが、何らかの理由でそれが表示されません。何か案は?PILを使用してTkinter Canvasウィジェットに画像を埋め込む

エラーまたは警告はありません。ちょうど空のTkウィンドウ。

マイコード:

import Tkinter 
from PIL import ImageTk, Image 


class image_manip(Tkinter.Tk): 
    def __init__(self,parent): 
     Tkinter.Tk.__init__(self,parent) 

     self.ImbImage = Tkinter.Canvas(self) 
     self.ImbImage.pack() 

     i = ImageTk.PhotoImage(Image.open('test.png')) 
     self.ImbImage.create_image(0, 0, image=i) 

def run(): 
    image_manip(None).mainloop() 
if __name__ == "__main__": 
    run() 

答えて

7

私の推測では、画像がガベージコレクトなっているということです。 "i"への参照を保存してみてください(例:self.image = i)

+0

これはありがたいです。 – rectangletangle

+0

@ブライアンオークリーそれも私の正確な問題でした。どうやって知ったの?次の行に画像が参照されていても、その画像はいつも素早くガベージコレクションされますか?それは「自己」とはどのような違いがありますか? – theJollySin

+1

@theJollySin: 'self'の違いは、' i'がローカル変数であるということです。その関数が終了すると、 'i'はガベージコレクションされる可能性があります。 'self'では、オブジェクトの寿命の参照が存在します。 –

関連する問題