Python 当UI关闭时,PyQT应用程序挂起

Python 当UI关闭时,PyQT应用程序挂起,python,multithreading,pyqt,Python,Multithreading,Pyqt,我当前在尝试关闭应用程序时遇到问题。到目前为止,我的应用程序当前在while循环(while-True循环)中生成并运行线程,而我的主线程在PyQT中初始化并运行UI def main(): group_size = 8 buffer_size = 4 app = QtGui.QApplication(sys.argv) dgui = DirectGui(group_size, buffer_size) engine = KCluster_Engin

我当前在尝试关闭应用程序时遇到问题。到目前为止,我的应用程序当前在while循环(while-True循环)中生成并运行线程,而我的主线程在PyQT中初始化并运行UI

def main():

    group_size = 8 
    buffer_size = 4 
    app = QtGui.QApplication(sys.argv)
    dgui = DirectGui(group_size, buffer_size)
    engine = KCluster_Engine(group_size, buffer_size)
    dgui.set_engine_ref(engine)
    engine.assign_interface(dgui)
    thread = Thread(target = engine.start)
    thread.start()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
在PyQT中关闭应用程序的主窗口时,在shell中生成python脚本的命令无法停止,即使使用ctrl-c


处理这种行为的最佳方式是什么?当我关闭应用程序时,我还希望生成的线程停止、加入并退出此进程。如何执行此操作?

如果将线程设为daemonic,它将在退出应用程序后停止。
在启动之前放置
thread.daemon=True
(如果在调用start之后执行此操作,将引发异常)。它应该可以很好地处理线程模块中的线程。

根据Python标准库,有两种终止线程的方法:

  • 如果您将其设为daemonic(
    thread.daemaon=True
    ),则它将在没有任何适当清洁的情况下被杀死
  • 或者,您可以使用类似于
    Event
    的信令方法,在线程中的适当位置进行测试
但我认为你应该看看这个古老的(但仍然是现实的…)问题:


所有这一切都假设
app.exec_389;()
在主线程中正确返回。

该线程很可能被卡住了。把原木放在那里,看看有什么happening@AbhishekBansal事实上,我知道它在一个真正的循环中旋转。退出应用程序后是否需要调用它以停止?当您关闭上一个窗口时,
app.exec\ux()
是否返回?