我正试图为我所写的一些图像处理算法编写一个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_())
在埃伦的帮助下,我设法解决了这个问题。 我刚刚停止在第二个线程中使用QPixmap,用另一个函数导入图像,并将其传递(将pyqtSignal(QPixmap)更改为pyqtSignal(np.ndarray)),现在它可以完美地工作了! 谢谢
你可以试试看这个答案: https://stackoverflow.com/a/38003561/9066493
基本上,
self.th
需要移动到不同的线程,如:然后使用signal和slot在主线程和工作线程之间传输数据,您需要将其
connect
转换为特定的方法slot
希望这个例子有帮助
相关问题 更多 >
编程相关推荐