用PyQt5写桌面宠物程序时,QMovie()无法接收格式为.gif的图片,但可以接收.png的图片

问题遇到的现象和发生背景

用PyQt5写桌面宠物程序时,QMovie()无法接收格式为.gif的图片,但可以接收.png的图片
编译器用的是PyCharm2022,python版本是3.7,PyQt是5.15

问题相关代码,请勿粘贴截图

class loadingGif(QWidget):
def init(self):
super(loadingGif, self).init()
self.label = QLabel("", self)
self.setFixedSize(500, 500)
self.movie = QMovie('lxh.gif')
print(self.movie.isValid())
print(self.movie.lastError())
self.label.setMovie(self.movie)
self.movie.start()

运行结果及报错内容

self.movie.isValid()显示的是False
self.movie.lastError()显示的是3
但传入.png图片时就一切正常

这是导入.gif后窗口就一片空白

img


导入.png后就可以正常显示

img

我想要达到的结果

窗口能正确显示gif图片

gif本质上是动画,并不是图片,是想显示动画吗?

这里有一个问题,你好像就没有调用init函数吧,python的默认构造函数是__init__,并不是init
我刚刚尝试了一下你的代码,如果修改成下面的样子(因为你的super导入会报错,应该是导入格式有点问题),就可以调用出来.
PS:跟你的代码相比,只修改了gif路径,注释掉了super,调用了一下init

class loadingGif(QWidget):
    def init(self):
        # super(loadingGif, self).init()
        self.label = QLabel("", self)
        self.setFixedSize(500, 500)
        self.movie = QMovie("F:/my_desktop/demo.gif")
        print(self.movie.isValid())
        print(self.movie.lastError())
        self.label.setMovie(self.movie)
        self.movie.start()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    UI = loadingGif()
    UI.init()
    UI.show()
    sys.exit(app.exec_())

从你运行的效果来看,应该是你的gif格式无效,因为你的movie->isValid() 当图片为gif则为无效。当为png则为有效。是不是gif的格式问题呢。
qt文档中的是这么说的

img


如果电影格式有效。则返回true,若无效则返回false。你可以试着换成MP4文件试试。我这边使用qt运行是有效的。