【问题标题】:How to make a QPushButton a loading button?如何使 QPushButton 成为加载按钮?
【发布时间】:2019-05-06 05:39:20
【问题描述】:

有没有办法用 QPushButton 制作加载按钮?我想做类似https://coreui.io/docs/components/loading-buttons/ 但在Qt 中。这可能吗?

我想从每个列表小部件项目中制作一个加载/进度条,如下所示。

【问题讨论】:

    标签: python pyqt pyqt5 qpushbutton


    【解决方案1】:

    你可以使用QMovie加载一个gif并在QPushButton中设置一个图标,在下面的例子中分别实现开始和结束动画的start和stop方法,以及传递gif路径的setGif方法:

    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

    【讨论】:

      猜你喜欢
      • 2022-11-29
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多