PyQt5与QThread崩溃

时间:2013-10-24 10:55:38

标签: pyqt5

以下最小代码在QThread的run for循环中崩溃。这在移除窗口小部件对象时有效。

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 个答案:

答案 0 :(得分: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)。

干杯!