Pregunta

Esta tiene que ser la mayor molestia que he encontrado con Pyqt: he pirateado un hilo de miniatura para mi aplicación (tengo que miniatura de toneladas de imágenes grandes), y parece que funcionaría (y eso casi lo hace). Mi principal problema es este mensaje de error cada vez que envío un SIGNAL De mi hilo:

QPixmap: It is not safe to use pixmaps outside the GUI thread

No puedo entender cómo evitar esto. He intentado pasar un QIcon A través de mi SIGNAL, pero eso todavía genera el mismo error. Si ayuda, aquí están los bloques de código que tratan con estas cosas:

los Thumbnailer clase:

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)

La parte que llama al hilo (ocurre cuando se deja caer un conjunto de imágenes en el cuadro de lista):

  self.thread.images.append(f)

  item = QtGui.QListWidgetItem(f, self.ui.pageList)
  item.setStatusTip(f)

  self.thread.start()

No estoy seguro de cómo manejar este tipo de cosas, ya que solo soy un novato de la GUI;)

Gracias a todos.

¿Fue útil?

Solución

Después de muchos intentos, finalmente lo obtuve. No puedo usar un QIcon o QPixmap desde dentro de un hilo no gui, así que tuve que usar un QImage En cambio, como eso transmite bien.

Aquí está el código mágico:

Extracto del thumbnailer.py QThread clase:

  icon = QtGui.QImage(image_file)
  self.emit(QtCore.SIGNAL('makeIcon(int, QImage)'), i, icon)

makeIcon() función:

  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)

Espero que esto ayude a cualquier otra persona que intente hacer un hilo de miniatura de imagen;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top