【发布时间】:2012-05-20 08:27:31
【问题描述】:
我编写了一个简短的模块,它可以传递图像并简单地创建一个 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 窗口之前它都无法恢复。
【问题讨论】:
-
只是提醒下一位访问者或 6 年后可能是 OP:除了 tkInter 和线程之外的主要问题是“threading.Thread(showimage(im))”不在线程中执行“showimage” , 但调用“showimage(im)”并将返回 (None) 作为参数提供给 Thread 构造函数。 "Thread(target=partial(showimage, im))" 将是正确的线程创建方式。
标签: python multithreading tkinter