以下最小代码在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_())
答案 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)。
干杯!