Skip to main content
 首页 » 编程设计

python之如何用PyQt加载图片资源

2025年05月04日21think

我的应用程序中有这个结构:

|-App 
| 
|-functions 
| 
|-ui 
|--ui.py 
|     
|images 
| 
|main.py 

我有一个包含一些脚本的函数文件夹和一个包含 PyQt 在 ui.py 文件中生成的代码的 ui 文件夹。

还有一个加载 ui.py 以显示界面的 main.py 文件,ui.py 从根目录的“图像”文件夹中加载一些图像。

如果我直接在 python 上执行我的脚本(在 main.py 文件上双击),图像不会显示..

但如果我使用带有“python main.py”的终端,图像会正确显示。

ui.py 上的引用是这样的:

icon.addPixmap(QtGui.QPixmap(_fromUtf8("images/flags/MXN.png")) 

请您参考如下方法:

使用 Qt Designer Resource System为图像创建资源文件。

然后使用PyQt's pyrcc tool将 Qt 资源文件转换为 python 模块。

注意:python 资源模块应该与您的 ui 文件位于同一目录中。因此,如果您在 Qt Designer 中创建了资源文件 App/resources.qrc,那么您应该像这样转换它:

pyrcc5 -o App/ui/resources_rc.py App/resources.qrc 

PySide (Qt4) 的等效工具是 pyside-rcc。对于 PySide2/PySide6,Qt rcc 工具本身有一个生成 python 输出的选项:

rcc -g python -o App/ui/resources_rc.py App/resources.qrc 

如果您没有使用 Qt Designer,请参阅下面的独立示例。以下文件都放在同一个根目录中。如果图像文件位于子目录中,则 qrc 文件必须使用相对路径(例如 subdir/image.jpg)。 resource_rc 模块是通过在根目录中执行以下命令生成的:

pyrcc5 -o resource_rc.py resource.qrc 

要使资源可访问,您必须导入生成的模块:

import resource_rc 

然后通过在路径前加上“:/”来访问资源中的文件(例如下面示例中的“:/image.jpg”)。

resource.qrc

<RCC> 
    <qresource> 
        <file>image.jpg</file> 
    </qresource> 
</RCC> 

main.py:

from PyQt5 import QtGui, QtWidgets 
import resource_rc 
 
class Window(QtWidgets.QWidget): 
    def __init__(self): 
        super().__init__() 
        self.label = QtWidgets.QLabel() 
        layout = QtWidgets.QVBoxLayout(self) 
        layout.addWidget(self.label) 
        self.label.setPixmap(QtGui.QPixmap(':/image.jpg')) 
 
app = QtWidgets.QApplication(['Test']) 
window = Window() 
window.show() 
app.exec_() 

更新:

PyQt6 现在删除了 pyrcc 工具(参见:How can resources be provided in PyQt6 (which has no pyrcc)?)。