打包资源文件
使用PyQt 5生成的应用程序引用图片资源主要有两种方法,第一种方法是将资源文件转换为Python文件,然后引用Python文件;第二种方法是在程序中通过相对路径引用外部图片资源。由于第一种方法会涉及Qt Designer,所以放在本章介绍;对于第二种方法,使用起来非常简单,我后面也会介绍。下面详细介绍第一种方法的实现过程。
一、使用Qt Designer 加载资源文件
在 Qt Designer中设计界面时是不能直接加入图片和图标等资源的,而是需要在PyQt开发目录下编写.qrc文件(可以用文本编辑器打开扩展名为.qrc的资源文件)。
(1)新建一个资源文件apprcc.qrc,它的内容如下:

(2)打开Qt Designer,新建一个类型为 Widget的简单窗体,该窗体文件名为MainWin02.ui。然后打开资源浏览器,按如下图所示进行操作。

首先进入资源编辑界面,然后打开资源文件,这里打开上面创建的资源文件apprcc.qrc。接下来选中apprcc.qrc,设置图片资源的前缀为 pic。最后添加或删除图片资源。
添加完成后,资源浏览器效果如下如:

按照以上步骤添加图片资源后,用文本编辑器查看apprcc.qrc文件,发现它是XML格式的。

二、在窗体中使用资源文件
1.使用Qt Designer在窗体中放置控件
继续使用Qt Designer操作 MainWin02.ui文件。在 Qt Designer 窗口左侧,将Display Widgets栏中的Label控件拖到窗体Form中间并选中它,然后在Qt Designer窗口右侧的属性编辑器中找到 pixmap属性,单击其后面的按钮,把它的值改为资源文件中的一张图片,如图所示。

2. 将.ui文件转换为.py文件
使用pyuic5命令将.ui文件转换为.py文件。
生成的完整代码如下:
为了使窗口的显示和业务逻辑分离,再新建一个调用窗口显示的文件 CallMainWin02.py,其完整代码如下:
运行 CallMainWin02.py文件,会抛出如下异常信息,提示在 MainWin02.py 中找不到模块apprcc_rc.

这说明在脚本中使用以下代码导入的模块异常。
调用脚本还差关键的一步,就是将.qrc文件转换为.py文件,然后导入正常的.py资源文件。
3、 转换资源文件
使用PyQt 5提供的pyrcc5命令将apprcc.qrc文件转换为apprcc_rc.py 文件((之所以添加rc,是因为Ot Designer 导入资源文件时默认是加_rc 的,这里是为了与Qt Designer一致)。
转换完成后,在同级目录下会多出一个与.qrc文件同名的.py文件。查看apprcc_rc.py文件,其内容如下:
可以看出,该文件已经使用QtCore.qRegisterResourceData进行了初始化注册,所以可以直接引用该文件。
4、导入.py资源文件
在界面文件 Main Win02.py 中,需要使用以下代码直接导入.py资源文件。
在 Qt Designer中使用图片资源时,图片资源的引入路径是冒号“:”加图片的路径,示例代码如下:
注意到上面的路径与qrc文件的路径稍微有些不同,多了一个前缀“pic”,原因是Qt Designer 会自动根据qrc中的qresource标签来调整这个路径。如图所示,在qresource标签中有一个“pic”属性,Qt Designer会自动把“pic”添加到图片路径i中。

运行CallMain Win02.py文件,显示效果如图所示。

运行脚本一切正常,可以在窗口中看到所导入的图片资源。