L'exécution d'un Tkinter forme dans un thread séparé

J'ai écrit un court module qui peut être transmise d'une image et crée simplement une fenêtre Tkinter et l'affiche. Le problème que je rencontre est que même quand j'instancie et appeler la méthode qui affiche l'image dans un thread séparé, le programme principal ne va pas continuer jusqu'à ce que le Tkinter fenêtre est fermée.

Voici mon module:

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

Il semble bien fonctionner, sauf que quand j'ai appeler à partir de mon programme de test comme celui-ci, il ne sera pas semblent permettre à mon programme de test pour continuer, même lorsqu'il est lancé dans un thread différent.

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

Je pense que peut-être mon problème est que je devrais être en train de créer un nouveau thread dans le module lui-même, mais je voulais juste essayer et garder les choses simples, comme je suis nouveau sur le Python.

De toute façon, merci d'avance pour toute aide.

edit: Pour plus de clarté, je suis juste essayer de faire un module qui permet d'afficher une image dans une fenêtre Tkinter, afin que je puisse utiliser ce module de tout temps que je veux afficher une image. Le problème que je rencontre est que toutes les fois qu'un programme utilise ce module, il ne peut pas reprendre jusqu'à ce que le Tkinter fenêtre est fermée.

  • Juste un heads-up pour le prochain visiteur ou peut-être OP 6years plus tard: Le principal problème en plus de tkInter, et les threads, c'est que "le filetage.Thread(showimage(im))" ne pas exécuter "showimage" dans un thread, mais les appels de "showimage(im)" et donne le retour (Aucun) comme argument pour le Thread constructeur. "Thread(cible=partielle(showimage, gi))" serait correct de création de thread sage.
InformationsquelleAutor derricw | 2012-05-11