python - PyQt5 多线程仍然卡住。如何提高绩效?

标签 python multithreading pyqt5

我正在尝试为我编写的一些图像处理算法编写一个 PyQt 应用程序。问题是,这些需要一些时间并使应用程序卡住(直到完成,但用户可能被迫同时关闭应用程序)。

我试图了解如何实现多线程,但我似乎无法使其工作。这个例子只是在不同的线程上加载一个大图像,但它仍然使整个应用程序卡住。我确信我在某个地方犯了错误。

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


class App(QWidget):
    def __init__(self):
       super().__init__()
       self._unit_ui()

    def _unit_ui(self):
        label = QLabel(self)
        label.resize(700, 700)

        button = QPushButton(self)

        self.th = Thread(self)
        self.th.change_pixmap.connect(label.setPixmap)
        button.pressed.connect(self.th.start)

        self.show()


class Thread(QThread):
    change_pixmap = pyqtSignal(QPixmap)

    def __init__(self, parent=None):
        QThread.__init__(self, parent=parent)
        self.isRunning = True

    def run(self):
        pixmap = QPixmap('gridscan.jpg')
        self.change_pixmap.emit(pixmap)



app = QApplication(sys.argv)
m = App()
sys.exit(app.exec_())

最佳答案

在 eyllanesc 的帮助下我成功解决了这个问题。 我刚刚停止在第二个线程中使用 QPixmap 并使用另一个函数导入图像,传递它(将 pyqtSignal(QPixmap) 更改为 pyqtSignal(np.ndarray)),现在它可以完美运行! 谢谢!

关于python - PyQt5 多线程仍然卡住。如何提高绩效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50699300/

相关文章:

python - 在Python中,是否可以迭代每个线程存储在线程局部中的值?

python - mousePressEvent 不适用于子部件?

python - 使用PyQt5录制视频

python - 在 pyspark 中运行脚本时缺少应用程序资源

python - 如何在 tkinter Canvas 上绘制弧线?

python - Django - 如何安装 Python 图像库 (PIL)

python - 在 Python 中对字典列表的值进行分组和聚合

c# - 拦截 C# 中的所有异常,即使它们已经被捕获

python - 从 TreeModel 中选定的索引检索特定数据

循环字符数组缓冲区 - c