Napisałem krótki moduł, który może być przekazany obrazowi i po prostu tworzy okno Tkinter i wyświetla je. Problem, który mam, polega na tym, że nawet gdy uruchamiam instancję i wywołuje metodę, która wyświetla obraz w oddzielnym wątku, program główny nie będzie kontynuowany, dopóki okno Tkinter nie zostanie zamknięte.Uruchamianie formularza Tkinter w oddzielnym wątku
Oto mój moduł:
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()
Wydaje się działać prawidłowo, z wyjątkiem gdy zgłoszę go z mojego programu testowego jak ten poniżej, to nie wydaje się, aby umożliwić mój program testowy, aby kontynuować, nawet gdy rozpoczęty w innym wątku.
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..."
myślę, że być może mój problem jest, że powinno być stworzenie nowego wątku w samym module, ale ja chce po prostu spróbować i keep it simple, ponieważ jestem nowy w Pythonie.
W każdym razie, z góry dzięki za pomoc.
edytuj: Dla jasności próbuję utworzyć moduł, który wyświetli obraz w oknie Tkinter, dzięki czemu będę mógł używać tego modułu w dowolnym momencie, gdy chcę wyświetlić obraz. Problem, który mam, polega na tym, że za każdym razem, gdy program używa tego modułu, nie można go wznowić, dopóki okno Tkintera nie zostanie zamknięte.
Pierwsza część odpowiedzi jest dobra, ale nie mogę przegłosować ze względu na porady dotyczące wypróbowania innych zestawów narzędzi. Tkinter doskonale nadaje się do tego, o co chodzi w tym pytaniu. –