【问题标题】:How do I integrate an animated GIF in a QMessageBox?如何将动画 GIF 集成到 QMessageBox 中?
【发布时间】:2018-10-06 00:34:18
【问题描述】:

我想要一个带有移动 GIF 图标的QMessageBox。所以我做了这个:

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 在哪里:

但结果是固定的图像。 我怎样才能让它动画? 我尝试了 QMovie 类,但我无法在 QMessageBox.setIconPixmap 函数中设置它

【问题讨论】:

    标签: python pyqt icons pyqt5 qmessagebox


    【解决方案1】:

    必须使用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
    

    【讨论】:

    • 太棒了!这完美地工作。但我有个问题。我怎么能在文档中找到它?如果我查看 QMessageBox,我找不到 qt_msgboxex_icon_label QLabel 对象。我的意思是我怎么知道 QMessageBox 有一个我可以修改的 QLabel 孩子?关于 Qt,我还有很多东西要学习 :) 再次感谢您。
    • @ymmx 那个文档里没有,第一件事就是你查了Qt的源代码,了解了widget的功能,比如你会看到一些内部widget被创建了在某些情况下,我看到按照隐式约定,您的 objectName 将以 qt_ 开头,然后是试验和检查它们的位置和用途。
    • 好的。好吧,我还不太有信心查看源代码。但确实,这似乎是个好主意。
    猜你喜欢
    • 2019-07-06
    • 2011-03-09
    • 2010-10-23
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2018-12-04
    相关资源
    最近更新 更多