2012-04-21 15 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() 

をしかし、私は一緒にアニメーションやテキストを配置することはできません。 2つの異なるラベルを使用する以外に、別の解決策がありますか?

答えて

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...')) 

編集

あなたが独自のバージョンを使用している場合はそれが可能です

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

+1

最も簡単な方法はおそらく、QHBoxLayoutとQLabelとQMovieが並んでいるウィジェットを使用することです。 – mata

1

私はこのjについて同じウィジェットを使用することが可能な方法が存在しないことを見出した:QLabelとQPainterのは、テキストを自分でペイントしますob。 2つの異なるQラベルを使用する必要があります。

関連する問題