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