Запуск формы Tkinter в отдельном потоке

Я написал короткий модуль, которому можно передать изображение, и он просто создает окно 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.

В любом случае, заранее спасибо за любую помощь.

edit: Для ясности я просто пытаюсь создать модуль, который будет отображать изображение в окне Tkinter, чтобы я мог использовать этот модуль в любое время, когда захочу отобразить изображение. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда программа использует этот модуль, она не может возобновиться, пока окно Tkinter не будет закрыто.

5
задан derricw 11 May 2012 в 23:35
поделиться