如何阻止关闭QThread?

pol*_*eer 2 python qt pyside

我正在为Minecraft编写一个启动器(请参阅完整代码:http://pastie.org/6633420),我知道这是一款游戏,但编程仍然很有趣.

目前,我遇到了使用QThread线程化的问题,因为所有线程似乎都应该关闭.我收到了错误:QThread: Destroyed while thread is still running.有没有办法解决这个问题,除了我之前在代码中所做的事情

for i in range(1,50):
    QThread.msleep(200)
    QCoreApplication.processEvents()
Run Code Online (Sandbox Code Playgroud)

因为我确定它真的很糟糕并且效果不好,因为它会导致应用程序在某些方面无响应.

D K*_*D K 7

这实际上是Qt的Python绑定中的一种错误.QThread在函数内部实例化(MainWidget.update_software在您的情况下)在函数返回时被垃圾收集,这导致执行在QThread: Destroyed while thread is still running消息的早期结束.

要解决此问题,有两种选择:

  1. 调用.wait()函数内的线程,以便线程可以在函数返回之前完成处理.这将阻止主线程,这可能不是你想要的.
  2. 使所有线程实例分别为实例变量或全局变量,以便线程的生命周期分别持续包含的实例或程序的持续时间.