2024-04-25 09:00:34 发布
网友
有没有办法用QPushButton制作加载按钮?我想做一些类似https://coreui.io/docs/components/loading-buttons/的事情,但是在Qt中。这可能吗?
我想做一个加载/进度条每一个列表小部件项目如下。
可以使用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_())
正在加载.gif
可以使用QMovie加载gif并将其设置为QPushButton中的图标,在下面的示例中,分别实现开始和结束动画的start和stop方法,以及传递gif路径的setGif方法:
正在加载.gif
相关问题 更多 >
编程相关推荐