我想显示一个.gif动画在QLabel
部件,文字旁。
下面的代码将无法正常工作:
self.status_txt = QtGui.QLabel('Loading... <img src="etc/loading.gif">')
作为图像将无法运行动画。
我试着用它achiving QMovie
对象:
self.status_txt = QtGui.QLabel("Loading...")
movie = QtGui.QMovie("etc/loading.gif")
self.status_txt.setMovie(movie)
movie.start()
但我不能把动画和文字在一起。 有没有除了使用两种不同的标签,不同的解决方案?
您可以将布局添加到标签上,然后用文字将它添加另一个标签...
self.status_txt = QtGui.QLabel()
movie = QtGui.QMovie("etc/loading.gif")
self.status_txt.setMovie(movie)
movie.start()
self.status_txt.setLayout(QtGui.QHBoxLayout())
self.status_txt.layout().addWidget(QLabel('Loading...'))
编辑 :
如果您使用自己的一个QLabel和QPainter的版本给自己绘制文本有可能:
from PyQt4.QtCore import QSize
from PyQt4.QtGui import QApplication, QLabel, QMovie, QPainter, QFontMetrics
class QTextMovieLabel(QLabel):
def __init__(self, text, fileName):
QLabel.__init__(self)
self._text = text
m = QMovie(fileName)
m.start()
self.setMovie(m)
def setMovie(self, movie):
QLabel.setMovie(self, movie)
s=movie.currentImage().size()
self._movieWidth = s.width()
self._movieHeight = s.height()
def paintEvent(self, evt):
QLabel.paintEvent(self, evt)
p = QPainter(self)
p.setFont(self.font())
x = self._movieWidth + 6
y = (self.height() + p.fontMetrics().xHeight()) / 2
p.drawText(x, y, self._text)
p.end()
def sizeHint(self):
fm = QFontMetrics(self.font())
return QSize(self._movieWidth + 6 + fm.width(self._text),
self._movieHeight)
def setText(self, text):
self._text = text
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
l = QTextMovieLabel('Loading...', 'loading.gif')
l.show()
app.exec_()
我发现,没有使用相同的部件这份工作可能的方式。 两种不同的QLabels必须使用。