我正在构建一个音乐播放器,使用SqueezePlay进行状态检查,它是一个SqueezeBox控制器应用程序。简而言之,我通过线程每5秒钟检查一次Squeezeplay的状态。如果歌曲标题更改,我会让其更新标签(Qlabel)、专辑封面(QPixmap)等。然而,当我要求它通过线程更新时,我得到了“在GUI线程外部使用像素图不安全”的错误信息。
如何在使用线程的同时设置QPixmap?
示例代码:
如何在使用线程的同时设置QPixmap?
示例代码:
#self.sq.getArtwork() returns variable with the image
coverArt = self.sq.getArtwork()
coverPixMap = QtGui.QPixmap()
coverPixMap.loadFromData(coverArt)
self.albumArt.setPixmap(coverPixMap)
非常感谢!
更新: 我尝试使用Emit进行以下操作,但它不起作用,有人可以看看我做错了什么吗?
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)
self.emit(QtCore.SIGNAL('setNewArtwork(QImage)'), icon)
这一行应该使用 QPixmap 而不是 QImage,因为你正在使用像素图。我不知道类型有多么严格执行。同时,请确保使用了队列连接(如果 PyQT 中存在这样的概念)。这可以确保槽在接收器线程中运行,而不是调用者线程中运行。 - Elliott