Python 3和tkinter,线程连接永远阻塞主线程

时间:2015-09-14 00:44:12

标签: python multithreading tkinter

所以基本上我有一个类,比如说SerialClass,它创建一个本地线程来更新组合框,构造函数看起来像这样:

def __init__(self, master):

    ...
    # Local thread.
    self.__thread = threading.Thread(target=self.__thread_handler)
    self.__thread_finished = False
    self.__thread.start()

这是线程执行的函数,它只是用值更新组合框。

def __thread_handler(self):
    while not self.__thread_finished:
        # Update the ports continously.
        self.update_ports()
    ...

这是我用来退出线程的函数:

def thread_exit(self):
    self.__thread_finished = True
    self.__thread.join()

另一个类,比方说App,实例化类SerialClass。 App创建一个Tk对象并使用此方法启动主应用程序:

def run(self):
    # Handle the close window event.
    self.__root.protocol("WM_DELETE_WINDOW", self.__on_close)
    # Start the application and wait for user events.
    self.__root.mainloop()

这是on_close方法:

def __on_close(self):
    # When the application finishes, handle the rest of the threads.
    self.__serialui.thread_exit()
    # Destroy the root window as expected.
    self.__root.destroy()

我遇到的问题是程序流永远不会到达root.destroy()函数,由于某种原因,当我调用thread_exit函数时,主线程永远被阻塞。如果我在thread_handler函数中注释self.update_ports(),则所有进程都会正常关闭。

有什么想法吗?

0 个答案:

没有答案