2017-09-11 11 views
0

をクラッシュ私は、様々なチュートリアルとSOの記事をコピーして作成した私のコードです:pyqt4 qthreadは、ここでのpython

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_()) 

これは非常に単純ですが、ときに私はすぐにそれをPythonのクラッシュを実行します。私はAnaconda3を使用しています。私はPython環境がすべて正しく設定されていることを確信していますが、間違っている可能性があります。私はWindows 10、64ビット、Python 3.5(64ビット)のAnaconda3を使用しています。私はcondaを使ってqt4をインストールしました。

答えて

2

実行中にワーカースレッドが破棄されているため、コードがクラッシュしています。これは、コンストラクタ内でローカル変数として作成されているために発生します(MainWindow)。 __init__()が完了し、workerが範囲外になると、Pythonのガベージコレクタによって削除される可能性があります。このようなことを避けるには、Mainwindowクラスのメンバーとしてworkerを割り当てることができます。

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