【发布时间】:2012-01-28 18:31:36
【问题描述】:
我正在构建一个音乐播放器,它使用 SqueezePlay 来检查状态,它是一个 SqueezeBox 控制器应用程序。长话短说,我使用线程每 5 秒检查一次 Squeezeplay 的状态。如果歌曲标题发生变化,我让它更新标签(Qlabel、专辑封面(QPixmap)等。但是,当我要求它通过线程更新它时,我得到 在外面使用像素图是不安全的GUI 线程。
如何进行线程化但仍设置 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)
【问题讨论】:
-
使用 QImage 代替 QPixmap
-
self.emit(QtCore.SIGNAL('setNewArtwork(QImage)'), icon)既然您使用的是像素图,这一行是否应该使用 QPixmap 而不是 QImage?我不知道这些类型的执行有多难。如果 PyQT 中存在这样的概念,还要确保您使用的是排队连接。这样可以确保槽在接收者的线程中运行,而不是在调用者的线程中。 -
当你说它对信号“不起作用”时,它在什么方面不起作用?出了什么问题?同一件事情?还有什么?
-
@FLX:你找到解决方案了吗?我有兴趣。
标签: python multithreading qt pyqt qpixmap