我使用Tkinter窗口来可视化程序的一些输出。窗口是线程的(见下面的基本结构),基本上它工作得很好。到目前为止,我只关不上窗户。当我点击"X"按钮关闭窗口时,它起作用了。
然而,当我从启动监视器线程的主程序调用monitor .close()方法时,窗口只是冻结(例如,它不响应点击"X"按钮),线程监视器继续运行。因此,主程序不退出。
因此,目前,我还必须首先通过单击关闭按钮"手动"关闭窗口,然后单击主程序。这不是一个大问题,但如果主程序可以自己关闭窗口,那就太好了。有提示吗?
感谢并致以最诚挚的问候
基督教class Monitor(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.start()
def close(self):
self.root.quit()
self.root.destroy()
def run(self):
self.root=Tkinter.Tk()
self.root.protocol("WM_DELETE_WINDOW", self.close)
self.root.mainloop()
以这种方式使用的Python线程和Tk(inter)不能很好地混合,因为它们违反了只从一个线程中使用Tk的Tcl/Tk线程模型。
它可以很好地处理消息传递,而不是线程的直接调用。所以你需要添加一些消息通过Queue传递到这个。
请看http://effbot.org/zone/tkinter-threads.htm的例子