filetage: Il n'est pas sécuritaire d'utiliser des images en dehors du thread GUI

Je suis en train de construire un lecteur de musique, qui vérifie l'état avec SqueezePlay, qui est une SqueezeBox controller app. Pour couper une longue histoire courte, je suis à la vérification de l'état de Squeezeplay jamais 5 secondes à l'aide de filetage. Si le titre de la chanson changements, j'ai laisser mettre à jour les étiquettes (Qlabel, la pochette de l'album (QPixmap), etc. Cependant, lorsqu'on lui demande de le mettre à jour via le filetage, je suis Il n'est pas sécuritaire d'utiliser des images en dehors du thread GUI .

Comment puis-je faire threading, mais toujours le QPixmap?

Exemple de code:

#self.sq.getArtwork() returns variable with the image
coverArt = self.sq.getArtwork()
coverPixMap = QtGui.QPixmap()
coverPixMap.loadFromData(coverArt)
self.albumArt.setPixmap(coverPixMap)

Merci beaucoup!

Mise à jour:
J'ai essayé les à Émettre, mais il ne fonctionne pas, quelqu'un peut-il prendre un coup d'oeil ce que je fais mal?

def setNewArtwork(self, image):
    coverPixMap = QtGui.QPixmap()
    coverPixMap.convertFromImage(image)
    icon = QtGui.QIcon(coverPixMap)
    item.setIcon(icon)

def getNewArtwork(self):
    coverArt = self.sq.getArtwork()
    icon = QtGui.QImage(coverArt)
    self.emit(QtCore.SIGNAL('setNewArtwork(QImage)'), icon)
utilisation QImage au lieu de QPixmap
self.emit(QtCore.SIGNAL('setNewArtwork(QImage)'), icon) Cette ligne doit avoir QPixmap au lieu de QImage, puisque vous êtes en utilisant des images? Je ne sais pas comment dur les types d'application. Assurez-vous également que vous êtes en utilisant une file d'attente de connexion, si un tel concept existe en PyQT. Cela garantit que la fente est exécuté dans le récepteur thread plutôt que de l'appelant fil.
Quand vous dites "ne pas travailler" avec les signaux, en quoi n'est-ce pas le travail? Ce qui ne va pas? La même chose? Quelque chose d'autre?
avez-vous trouvé une solution? Je suis intéressé.

OriginalL'auteur FLX | 2011-12-27