首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让一个QPushButton成为一个加载按钮?

如何让一个QPushButton成为一个加载按钮?
EN

Stack Overflow用户
提问于 2018-12-05 02:04:01
回答 1查看 1.1K关注 0票数 3

有没有一种方法可以用QPushButton做一个加载按钮?我想用Qt做一些像https://coreui.io/docs/components/loading-buttons/这样的事情。这个是可能的吗?

我想让每个列表小部件项目的加载/进度条如下所示。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-05 04:02:54

可以使用QMovie加载gif并将其设置为QPushButton中的图标,在下面的示例中,实现分别启动和结束动画的start和stop方法,以及传递gif路径的setGif方法:

代码语言:javascript
复制
from PyQt5 import QtCore, QtGui, QtWidgets

class LoadingButton(QtWidgets.QPushButton):
    @QtCore.pyqtSlot()
    def start(self):
        if hasattr(self, "_movie"):
            self._movie.start()

    @QtCore.pyqtSlot()
    def stop(self):
        if hasattr(self, "_movie"):
            self._movie.stop()
            self.setIcon(QtGui.QIcon())

    def setGif(self, filename):
        if not hasattr(self, "_movie"):
            self._movie = QtGui.QMovie(self)
            self._movie.setFileName(filename)
            self._movie.frameChanged.connect(self.on_frameChanged)
            if self._movie.loopCount() != -1:
                self._movie.finished.connect(self.start)
        self.stop()

    @QtCore.pyqtSlot(int)
    def on_frameChanged(self, frameNumber):
        self.setIcon(QtGui.QIcon(self._movie.currentPixmap()))

if __name__ == '__main__':
    import sys
    import random
    app = QtWidgets.QApplication(sys.argv)
    w = QtWidgets.QWidget()
    lay = QtWidgets.QVBoxLayout(w)
    for i in range(5):
        button = LoadingButton("Install")
        button.setGif("loading.gif")
        QtCore.QTimer.singleShot(random.randint(3000, 6000), button.start)
        QtCore.QTimer.singleShot(random.randint(8000, 12000), button.stop)
        lay.addWidget(button)
    w.show()
    sys.exit(app.exec_())

loading.gif

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53618971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档