我使用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()
答案 0 :(得分:2)
以这种方式使用的Python Threading和Tk(inter)不能很好地混合,因为它们违反了从一个线程使用Tk的Tcl / Tk线程模型。
它可以很好地处理消息传递,但不是来自线程的直接调用。所以你需要添加一些通过Queue传递给它的消息。