2017-09-11 46 views
0

这里是我的代码,我通过复制各种教程和SO帖子发布:PyQt4的QThread的崩溃蟒蛇

import sys 

from PyQt4.QtGui import * 
from PyQt4.QtCore import QObject, pyqtSignal, QThread 

class Worker(QThread): 
    def __init__(self): 

     QThread.__init__(self) 

class MainWindow(QWidget): 

    def __init__(self): 
     super().__init__() 

     worker = Worker() 
     worker.start() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    window = MainWindow() 
    window.resize(640, 480) 
    window.show() 
    sys.exit(app.exec_()) 

这是非常简单的,但是当我立即运行蟒蛇崩溃。我使用的是Anaconda3,我很确定python环境全部正确设置,但我可能是错的。我使用的是Windows 10,64位,带有Python 3.5(64位)的Anaconda3。我使用conda安装qt4。

回答

2

您的代码崩溃是因为工作线程在运行时被破坏。发生这种情况是因为它在MainWindow的构造函数中被创建为局部变量。在__init__()完成并且worker超出范围后,它将被Python的垃圾收集器删除。为了避免发生这种情况,您可以将worker作为Mainwindow类的成员。

class MainWindow(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.worker = Worker() 
     self.worker.start()