PyQt5 与 QThread 崩溃

Posted

技术标签:

【中文标题】PyQt5 与 QThread 崩溃【英文标题】:PyQt5 crash with QThread 【发布时间】:2013-10-24 10:55:37 【问题描述】:

以下最小代码在 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】:

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

干杯!

【讨论】:

没问题。如果我的回答解决了您的问题,请将其标记为已解决:)。干杯!

以上是关于PyQt5 与 QThread 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 macOS 上使用 QThread 时 PyQt 应用程序崩溃或挂起?

QThread 似乎没有启动; PyQt5,Python 2.7.9

PyQt5 QThread 不会因终止或标志变量而停止

python pyqt5 QThread

PyQt5.QThread 的 start() 方法不执行 run() 方法

在 PyQt5 中将参数传递给 QThread 子类时出错