Ble*_*der 4 pyqt4 qpixmap qthread
这是我在使用PyQT时遇到的最大麻烦:我已经为我的应用程序拼了一个缩略图线程(我必须缩略图大量的图像),看起来它会工作(而且几乎可以).每当我SIGNAL从我的线程发送一个时,我的主要问题是这个错误消息:
QPixmap: It is not safe to use pixmaps outside the GUI thread
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何解决这个问题.我试过QIcon通过我的SIGNAL,但仍然会产生相同的错误.如果它有帮助,这里是处理这些东西的代码块:
本Thumbnailer类:
class Thumbnailer(QtCore.QThread):
def __init__(self, ListWidget, parent = None):
super(Thumbnailer, self).__init__(parent)
self.stopped = False
self.completed = False
self.widget = ListWidget
def initialize(self, queue):
self.stopped = False
self.completed = False
self.queue = queue
def stop(self):
self.stopped = True
def run(self):
self.process()
self.stop()
def process(self):
for i in range(self.widget.count()):
item = self.widget.item(i)
icon = QtGui.QIcon(str(item.text()))
pixmap = icon.pixmap(72, 72)
icon = QtGui.QIcon(pixmap)
item.setIcon(icon)
Run Code Online (Sandbox Code Playgroud)
调用线程的部分(当一组图像被放到列表框中时发生):
self.thread.images.append(f)
item = QtGui.QListWidgetItem(f, self.ui.pageList)
item.setStatusTip(f)
self.thread.start()
Run Code Online (Sandbox Code Playgroud)
我不知道如何处理这种东西,因为我只是一个GUI新手;)
谢谢大家.
Ble*_*der 10
经过多次尝试,我终于明白了.我不能使用QIcon或QPixmap来自非GUI线程,所以我不得不使用一个QImage,因为它传输良好.
这是神奇的代码:
摘自thumbnailer.py QThread班级:
icon = QtGui.QImage(image_file)
self.emit(QtCore.SIGNAL('makeIcon(int, QImage)'), i, icon)
Run Code Online (Sandbox Code Playgroud)
makeIcon() 功能:
def makeIcon(self, index, image):
item = self.ui.pageList.item(index)
pixmap = QtGui.QPixmap(72, 72)
pixmap.convertFromImage(image) # <-- This is the magic function!
icon = QtGui.QIcon(pixmap)
item.setIcon(icon)
Run Code Online (Sandbox Code Playgroud)
希望这有助于其他人试图制作图像缩略图线程;)
| 归档时间: |
|
| 查看次数: |
3043 次 |
| 最近记录: |