Как интегрировать анимированный GIF в QMessageBox? - PullRequest
0 голосов
/ 25 апреля 2018

Я хотел бы иметь QMessageBox с движущимся GIF-значком.Поэтому я сделал это:

from PyQt5.QtGui import * 
from PyQt5.QtWidgets import *
import os
import sys

def msg_wait(s):
    msg = QMessageBox()
    msg.setIconPixmap(QPixmap('wait.gif').scaledToWidth(100))
    msg.setText(s)
    msg.setWindowTitle(" ")
    msg.setModal(False)
    # msg.setStandardButtons(QMessageBox.Ok)
    msg.show()
    return msg


class SurfViewer(QMainWindow):
    def __init__(self, parent=None):
        super(SurfViewer, self).__init__()
        self.parent = parent
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)

        self.msg=msg_wait('blablabla')
        self.msg.setStandardButtons(QMessageBox.Cancel)

def main():
    app = QApplication(sys.argv)
    ex = SurfViewer(app)
    ex.setWindowTitle('NMM Stimulator')

    ex.showMaximized()
    ex.show()
    # ex.move(0, 0)
    # ex.resizescreen()
    sys.exit(app.exec_( ))


if __name__ == '__main__':
    main()

, где GIF:

enter image description here

Но в результате получается фиксированное изображение.Как я могу сделать это анимированным?Я попробовал что-то с классом QMovie, но не смог установить его в функции QMessageBox.setIconPixmap

1 Ответ

0 голосов
/ 25 апреля 2018

QMovie должен использоваться, но для этого первым делом нужно получить к нему доступ QLabel напрямую, используйте findChild:

def msg_wait(s):
    msg = QMessageBox()
    # create Label
    msg.setIconPixmap(QPixmap('wait.gif').scaledToWidth(100))
    icon_label = msg.findChild(QLabel, "qt_msgboxex_icon_label")
    movie = QMovie('wait.gif')
    # avoid garbage collector
    setattr(msg, 'icon_label', movie)
    icon_label.setMovie(movie)
    movie.start()

    msg.setText(s)
    msg.setWindowTitle(" ")
    msg.setModal(False)
    # msg.setStandardButtons(QMessageBox.Ok)
    msg.show()
    return msg
...