我正在尝试为我编写的一些图像处理算法编写一个 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/