2012-04-21 75 views
7

我想在QLabel小工具中顯示一個.gif動畫以及文本。在QLabel中顯示.gif動畫

下面的代碼將無法正常工作:

self.status_txt = QtGui.QLabel('Loading... <img src="etc/loading.gif">') 

的圖像將無法運行動畫。

我試着用QMovie對象achiving它:

self.status_txt = QtGui.QLabel("Loading...") 
movie = QtGui.QMovie("etc/loading.gif") 
self.status_txt.setMovie(movie) 
movie.start() 

但我不能把動畫和文字在一起。 除了使用兩個不同的標籤之外,還有其他解決方案嗎?

回答

14

您可以將佈局添加到標籤上,然後用文字將它添加另一個標籤...

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_() 
+0

我希望圖像能夠在文本之後顯示,就像它是其中的一部分。 – iTayb 2012-04-25 06:27:58

+1

那麼最簡單的方法可能是使用一個帶有QHBoxLayout和QLabel和QMovie的小部件。 – mata 2012-04-25 10:24:34

1

我發現,沒有使用相同的部件此Ĵ可能的方式OB。必須使用兩個不同的QLabel。