关闭线程Tkinter窗口

时间:2011-08-10 08:56:18

标签: python multithreading tkinter

我使用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()

1 个答案:

答案 0 :(得分:2)

以这种方式使用的Python Threading和Tk(inter)不能很好地混合,因为它们违反了从一个线程使用Tk的Tcl / Tk线程模型。

它可以很好地处理消息传递,但不是来自线程的直接调用。所以你需要添加一些通过Queue传递给它的消息。

请查看http://effbot.org/zone/tkinter-threads.htm示例。