gpt4 book ai didi

python - 如何从另一个线程向 gui 发送标签 - PyQt

转载 作者:太空宇宙 更新时间:2023-11-04 05:15:43 25 4
gpt4 key购买 nike

这是一个简单的漫画阅读器,我试图在不卡住主窗口的情况下加载图像,我尝试使用线程来执行此操作但无法将图像发送到主窗口,我做错了什么?如果有另一种方法我想知道谢谢,我也是 python 的新手。

from PyQt5 import QtCore, QtGui, QtWidgets
import os

class MainWin(QtWidgets.QMainWindow):

...

def add_widget(self, data):
self.verticalLayout.addWidget(data)

def file_open(self):
adres = QtWidgets.QFileDialog.getExistingDirectory()
self.loader = LoaderThread(adres)
self.loader.start()
self.loader.pics.connect(self.add_widget)


class LoaderThread(QtCore.QThread):

pics = QtCore.pyqtSignal(object)

def __init__(self, nAdres):
QtCore.QThread.__init__(self)
self.adres = nAdres

def run(self):
liste = os.listdir(self.adres)
order = 0
for i in liste:
label = QtWidgets.QLabel()
pixmap = QtGui.QPixmap(self.adres + '/' + liste[order])
label.setPixmap(pixmap)
self.pics.emit(label)
order += 1

if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
win = MainWin()
win.show()
sys.exit(app.exec_())

最佳答案

您不能在 GUI 线程之外创建小部件或像素图。所以只需在工作线程中创建一个QImage,然后在槽中创建标签和像素图:

class LoaderThread(QtCore.QThread):
...
def run(self):
liste = os.listdir(self.adres)
order = 0
for i in liste:
image = QtGui.QImage(self.adres + '/' + liste[order])
self.pics.emit(image)
order += 1


class MainWin(QtWidgets.QMainWindow):
...
def add_widget(self, image):
label = QtWidgets.QLabel()
label.setPixmap(QtGui.QPixmap.fromImage(image))
self.verticalLayout.addWidget(label)

关于python - 如何从另一个线程向 gui 发送标签 - PyQt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41733518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com