蓝色星晨|045-添加资源文件,实战PyQt5:


为解决这些问题 , 我们可以使用Qt官方提供的工具将这些资源文件编译成二进制文件 , 直接打包到程序中 。 为了编译这些资源文件 , 通常我们需要在代码目录下创建一个.qrc后缀的文件 , 为了叙述方便 , 我们假设这个文件的名字为resource.qrc , 它和我们主py文件位于同一个目录 。
一个.qrc资源集合文件是用来指定文件将被嵌入其资源的XML文件 。 根节点为RCC , 里面可以包含若干qresource节点 , 每个qresource有自己的prefix(路径前缀)属性 , qresource节点包含了若干file节点 , 描述了各个文件相对于.qrc的路径 。 在C++Qt的IDE中 , 我们添加资源后他会自动编译出二进制文件 。 但在PyQt中 , 我们需要手动来完成这些操作 。
【蓝色星晨|045-添加资源文件,实战PyQt5:】在resource.qrc输入以下内容:
上面就是一个qrc文件的基本框架 , 假设我们需要使用一个在res下名为use-python.gif的动画文件 , 在qresource项之间插入
res/use-python.gif/file>
这时的resource.qrc文件如下所示
res/use-python.gif编译资源文件述资源文件并不能直接使用 , 需要将其转换成对应的py文件才能导入 , 转换命令如下:
pyrcc5-orosource_rc.pyresource.qrc#rosource_rc.py为转换生成的包含资源信息的py文件#resource.qrc为我们所写的XML资源文件在VSCode中 , 我们可以借助插件PYQTIntergration提供的菜单来转换(需要先配置好rcc的路径):
importresource_rc在引用.qrc资源中的文件时 , 路径为:冒号+prefix路径前缀+file相对路径 。
self.movie=QMovie(":/res/use-python.gif")资源文件加载测试创建文件loadresourec.py,播放use-python.gif , 这次不使用绝对路径加载文件 , 而是使用资源加载的方式来实现 。
resource.qrc文件内容如下:
res/use-python.gifloadresourec.py完整代码如下:
importsysfromPyQt5importQtCore,QtGui,QtWidgetsfromPyQt5.QtWidgetsimport(QApplication,QWidget,QLabel,QVBoxLayout)fromPyQt5.QtGuiimportQMoviefromPyQt5.QtCoreimportQt,QSizeimportresource_rcclassDemoLoadResource(QWidget):def__init__(self,parent=None):super(DemoLoadResource,self).__init__(parent)#设置窗口标题self.setWindowTitle("实战PyQt5:LoadResourceDemo!")#设置窗口大小self.resize(400,300)self.initUi()definitUi(self):vLayout=QVBoxLayout(self)self.movie=QMovie(":/res/use-python.gif")self.disp_gif=QLabel(self)self.disp_gif.setMovie(self.movie)vLayout.addWidget(self.disp_gif)self.movie.start()self.setLayout(vLayout)defresizeEvent(self,event):newSize=self.disp_gif.size()newSize.setWidth(newSize.width()-32)newSize.setHeight(newSize.height()-32)self.movie.setScaledSize(newSize)super(DemoLoadResource,self).resizeEvent(event)if__name__=='__main__':app=QApplication(sys.argv)window=DemoLoadResource()window.show()sys.exit(app.exec())运行结果如下图: