Displaying gif in PyQt GUI using QLabel

后端 未结 1 1835
心在旅途
心在旅途 2021-01-23 23:27

I am trying to display a loading gif after a button is pressed. This is the code I currently have

import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore im         


        
1条回答
  •  小鲜肉
    小鲜肉 (楼主)
    2021-01-23 23:53

    The problem is that QMovieLabel is a local variable within gif_display so it will be deleted when the function finishes running, so the solution is to avoid deleting it. There are 2 options: make it an attribute of the class or make it a child of the window , I will show the second method since I think it is the one you want:

    import sys
    from PyQt4 import QtCore, QtGui
    
    class MainWindow (QtGui.QMainWindow):
        def __init__(self, parent=None):
            super(MainWindow,self).__init__(parent)
            self.setGeometry(50,50,240,320)
            self.home()
    
        def home(self):
            but = QtGui.QPushButton("Example", self) # Creates the brew coffee button
            but.clicked.connect(self.gif_display)
            but.resize(200,80)
            but.move(20,50)
            self.show()
    
        @QtCore.pyqtSlot()
        def gif_display(self):
            l = QMovieLabel('loading.gif', self)
            l.adjustSize()
            l.show()
    
    class QMovieLabel(QtGui.QLabel):
        def __init__(self, fileName, parent=None):
            super(QMovieLabel, self).__init__(parent)
            m = QtGui.QMovie(fileName)
            self.setMovie(m)
            m.start()
    
        def setMovie(self, movie):
            super(QMovieLabel, self).setMovie(movie)
            s=movie.currentImage().size()
            self._movieWidth = s.width()
            self._movieHeight = s.height()
    
    def run():
        app = QtGui.QApplication(sys.argv)
        GUI = MainWindow()
        sys.exit(app.exec_())
    
    if __name__ == '__main__':
        run()
    

    0 讨论(0)
提交回复
热议问题