2012-02-18 17 views
0

スライドショー中に画像を表示する際に問題が発生しています。 update_imageの最初の4行がコメントアウトされると、最初のイメージ(1.png)が表示されます。しかし、コメントしていないときは、空白のGUIが表示されます。誰でも何か提案がありますか?空白のGUIとPythonの画像スライドショー

import Tkinter 
    import Image, ImageTk 

    class App(): 
     def __init__(self): 
      self.root = Tkinter.Tk() 
      image1=Image.open('C:\Users\Jason\Desktop\ScreenShots\\1.png') 
      self.root.geometry('%dx%d' % (image1.size[0],image1.size[1])) 
      tkpi=ImageTk.PhotoImage(image1) 
      label_image=Tkinter.Label(self.root, image=tkpi) 
      label_image.place(x=0,y=0,width=image1.size[0],height=image1.size[1]) 

      self.update_image() 
      self.root.mainloop() 


     def update_image(self): 
      image1=Image.open('C:\Users\Jason\Desktop\ScreenShots\\2.png') 
      tkpi=ImageTk.PhotoImage(image1) 
      label_image=Tkinter.Label(self.root, image=tkpi) 
      label_image.place(x=0,y=0,width=image1.size[0],height=image1.size[1]) 

      print 'slide' 
      self.root.after(500, self.update_image) 

    app=App() 

答えて

1

は、おそらく何が起こっているのか、それはupdate_imageの範囲にローカルであるので、あなたのイメージオブジェクトがガベージコレクトを取得しているということです。画像オブジェクトをクラスのプロパティとして保存してみてください(例:self.tkpi

ところで - 一度に1つの画像を表示しているスライドショーを行っている場合は、新しいラベルを作成するたびに新しいラベルが表示されます。新しいイメージを作成し、それを既存のラベルイメージに割り当てるだけで十分です。

placeではなく、gridまたはpackを使用することをおすすめします。 placeはいくつかの状況では便利ですが、他の2つのジオメトリマネージャを使用する方が一般的には優れています。