vorta/src/vorta/views/partials/loading_button.py

32 lines
950 B
Python

"""
Adapted from https://stackoverflow.com/questions/53618971/how-to-make-a-qpushbutton-a-loading-button
"""
from PyQt6 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()))