2013-10-24 59 views
0

QThread的run for循環中出現以下最小代碼崩潰。這在刪除小部件對象時起作用。PyQt5 QThread崩潰

import sys 
import time 
from PyQt5.QtCore import * 
from PyQt5.QtWidgets import * 

class Widget(QLabel): 
    def __init__(self): 
     super(Widget, self).__init__() 
     self.setText("hello") 
     self.show() 

class Worker(QThread): 
    def __init__(self): 
     super(Worker, self).__init__() 
    def run(self): 
     for i in range(1,2): 
      label = QLabel() 
      label.setText(str(i)) 
      label.show() 
      time.sleep(1) 
      label.close() 

app = QApplication(sys.argv) 
widget = Widget() 
worker = Worker() 
worker.start() 
sys.exit(app.exec_()) 

回答

1

從QT5文檔: http://qt-project.org/doc/qt-5.0/qtcore/thread-basics.html

GUI線程和工作線程

如前所述,每個程序都有一個線程在啓動時。這個線程被稱爲「主線程」(在Qt應用程序中也稱爲「GUI線程」)。 Qt GUI必須在這個線程中運行。所有小部件和幾個相關的類(例如QPixmap)都不能在輔助線程中使用。輔助線程通常被稱爲「輔助線程」,因爲它用於從主線程卸載處理工作。

您不能在工作線程中創建小工具。 顯然time.sleep導致段錯誤。您可以改爲使用QThread.sleep(線程中的self.sleep)。

乾杯!

+0

非常感謝。 – codeur

+0

沒問題。如果我的答案解決了你的問題,請將其標記爲已解決:)。乾杯! –