Ausführen eines Tkinter-Formulars in einem separaten Thread

Ich habe ein kurzes Modul geschrieben, dass ein Bild übergeben werden kann und einfach ein Tkinter-Fenster erstellt und es anzeigt. Das Problem, das ich habe, ist, dass selbst wenn ich die Methode instanziiere und aufrufe, die das Bild in einem separaten Thread anzeigt, das Hauptprogramm nicht fortgesetzt wird, bis das Tkinter-Fenster geschlossen wird.

Hier ist mein Modul:

<code>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()
</code>

Es scheint gut zu funktionieren, außer wenn ich es von meinem Testprogramm wie dem folgenden aufrufe, wird es meinem Testprogramm nicht zu erlauben, fortzufahren, selbst wenn es in einem anderen Thread gestartet wird.

<code>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..."
</code>

Ich denke, dass mein Problem vielleicht darin besteht, dass ich einen neuen Thread innerhalb des Moduls selbst erstellen sollte, aber ich wollte nur versuchen, es einfach zu halten, da ich neu in Python bin.

Trotzdem vielen Dank im Voraus für jede Hilfe.

Bearbeiten: Der Übersichtlichkeit halber versuche ich nur, ein Modul zu erstellen, das ein Bild in einem Tkinter-Fenster anzeigt, sodass ich dieses Modul jederzeit verwenden kann, wenn ich ein Bild anzeigen möchte. Das Problem, das ich habe, ist, dass jedes Mal, wenn ein Programm dieses Modul verwendet, es nicht fortgesetzt werden kann, bis das Tkinter-Fenster geschlossen wird.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage