PyQt5中QLabel无法显示GIF及JPG格式文件的问题排查与解决方案
PyQt5 QLabel无法显示GIF/JPG?亲测有效的解决步骤
最近我踩了个PyQt5的坑:QLabel组件完全无法显示GIF和JPG格式的文件,试过网上各种常规方案——比如检查文件路径、用QMovie加载GIF、确认文件本身没问题,甚至换成完整绝对路径都不管用。当时写的代码如下:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtGui import QMovie from PyQt5 import QtCore, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(600, 400) self.for_gif = QtWidgets.QLabel(Form) self.for_gif.setGeometry(QtCore.QRect(10, 40, 580, 341)) self.for_gif.setText("") self.for_gif.setObjectName("for_gif") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) class MyWidget(QMainWindow, Ui_Form): def __init__(self): super().__init__() self.setupUi(self) self.movie = QMovie(self) self.add_gif() def add_gif(self): self.movie.setFileName("south_park.gif") self.for_gif.setMovie(self.movie) self.movie.start() if __name__ == '__main__': app = QApplication(sys.argv) ex = MyWidget() ex.show() sys.exit(app.exec_())
排查问题根源
后来我想到可以用QImageReader.supportedImageFormats()来检查PyQt5当前支持的图片格式,输出结果居然只有:bmp、pbm、pgm、png、ppm、xbm、xpm——完全没有GIF和JPG的影子!这说明PyQt5没有加载对应的图片格式驱动。
最终解决方案
折腾了好一会儿,终于找到最简单的解决办法:
- 找到你PyQt5安装目录下的
imageformats文件夹,一般路径是你的Python安装目录\Lib\site-packages\PyQt5\Qt5\plugins\imageformats - 把整个
imageformats文件夹复制到python.exe所在的目录(也就是Python根目录)
这个文件夹里包含了各种图片格式的驱动文件,比如Windows下的qgif.dll、qjpeg.dll,Linux下的libqgif.so、libqjpeg.so,Mac下的qgif.dylib、qjpeg.dylib。复制之后,PyQt5就能自动加载这些驱动,QLabel也就正常显示GIF和JPG了!
内容的提问来源于stack exchange,提问作者BoggyDoggyBoo
相关产品推荐
相关产品推荐

