画像を渡すことができ、Tkinter ウィンドウを作成して表示するだけの短いモジュールを作成しました。私が抱えている問題は、別のスレッドで画像を表示するメソッドをインスタンス化して呼び出しても、Tkinter ウィンドウが閉じられるまでメイン プログラムが続行されないことです。
これが私のモジュールです:
import Image, ImageTk
import Tkinter
class Viewer(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
def show(self,img):
self.to_display = ImageTk.PhotoImage(img)
self.label_image = Tkinter.Label(self,image=self.to_display)
self.label_image.grid(column = 0, row = 0, sticky = "NSEW")
self.mainloop()
以下のようなテストプログラムから呼び出す場合を除いて、正常に動作するようです。別のスレッドで開始した場合でも、テストプログラムを続行できないようです。
import Image
from viewer import Viewer
import threading
def showimage(im):
view = Viewer(None)
view.show(im)
if __name__ == "__main__":
im = Image.open("gaben.jpg")
t = threading.Thread(showimage(im))
t.start()
print "Program keeps going..."
おそらく私の問題は、モジュール自体内に新しいスレッドを作成する必要があることだと思いますが、Python は初めてなので、シンプルに保ちたいと思っていました。
とにかく、助けてくれてありがとう。
編集: わかりやすくするために、画像を表示したいときにいつでもこのモジュールを使用できるように、Tkinter ウィンドウに画像を表示するモジュールを作成しようとしています。私が抱えている問題は、プログラムがこのモジュールを使用するたびに、Tkinter ウィンドウが閉じられるまで再開できないことです。