tkinter窗口无法正常关闭

时间:2018-10-18 10:15:27

标签: python-3.x multithreading tkinter multiprocessing

我的tkinter应用程序窗口无法正确关闭。我正在tkinter 8.6中使用python 3.6.6

我的代码基本上是这样做的:

打开一个进程,其中:

  1. 通过3秒后关闭Gui窗口的线程调用测试功能
  2. Gui窗口已创建
  3. 等待线程完成(加入)并猜测窗口已关闭

我尝试使用:

  • 退出->窗口仅在我将鼠标悬停在它上面时关闭
  • 破坏->破坏不会返回

我将其剥离为以下代码,请复制并执行和/或告诉我有什么问题...

from time import sleep, time
import threading
from multiprocessing import Process, set_start_method
from tkinter import *
CtrlApplObj = None

def Start():
    global CtrlApplObj
    CtrlApplObj = None
    CtrlApplObj = ControlApplication()
    CtrlApplObj.run()

def End():
    print("Quit now...")
    #CtrlApplObj.root.destroy()
    CtrlApplObj.root.quit()

class ControlApplication():
    def __init__(self):
        pass

    def run(self):
        self.root=Tk()
        print("Mainloop...")
        self.root.mainloop()

def test():
    sleep(3)
    End()

def execute():
    T1 = threading.Thread(target=test)
    T1.start()
    Start()
    T1.join()

if __name__ == "__main__":
    set_start_method("spawn")
    for i in range(2):
        TestProcess = Process(target=execute)
        TestProcess.start()
        TestProcess.join()

1 个答案:

答案 0 :(得分:1)

我的最终解决方案是在测试线程中不使用任何tkinter操作。然后销毁。

我的测试流程没有关闭还有另一个问题。这是因为队列不为空。那个虚张声势的过程结束了。