12

QLabelウィジェットにテキストと一緒に.gifアニメーションを表示したいと思います。

次のコードは機能しません。

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

画像はアニメーション化されないため。

オブジェクトを使用してそれを達成しようとしましたQMovie

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

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

4

3 に答える 3

20

ラベルにレイアウトを追加してから、そのテキストを含む別のラベルを追加できます...

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_()
于 2012-04-23T10:37:21.260 に答える
3

短い、要点の答え:

movie = QtGui.QMovie('file.gif')
my_label.setMovie(movie)
movie.start()

この場合のimportステートメントfrom PyQt5 import QtCore, QtGui, QtWidgetsは、QtDesignerによって生成されるデフォルトであることに注意してください。

于 2020-08-31T21:23:52.820 に答える
1

このジョブに同じウィジェットを使用する方法はないことがわかりました。2つの異なるQLabelを使用する必要があります。

于 2012-04-26T09:58:42.997 に答える