0

以下最小代码在 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_())
4

1 回答 1

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)。

干杯!

于 2013-10-26T23:35:36.807 回答