将资源文件导入 PyQt 代码?

Importing resource file to PyQt code?

我看过Qt的纪录片和很多与这个不太相似的问题,但我仍然没有弄清楚我该怎么做。

我不完全确定如何将资源文件导入 Python 代码,所以像素图显示没有任何问题。


我将所有文件都放在同一个目录中,我创建了 qrc。文件并编译它:rcc -binary resources.qrc -o res.rcc 生成资源文件。

我导入了 res_rcc 但标签上的像素图仍然没有显示:

import res_rcc


这是我的 qrc 中的内容。文件:

<RCC>
  <qresource prefix="newPrefix">
    <file>download.jpeg</file>
  </qresource>
</RCC>

问题:

如何在 PyQt 代码中导入资源文件? | 如果像素图与 .qrc 资源文件在同一个目录中,我还需要指定完整路径吗?

对于 pyqt,您必须使用 pyrcc4,它相当于 python 的 rcc。

pyrcc4 -o resources.py resources.qrc

这会生成 resources.py 模块,需要在 python 代码中导入该模块才能使资源可用。

import resources

要在您的代码中使用资源,您必须使用“:/”前缀:

例子

from PyQt4.QtCore import *
from PyQt4.QtGui import *

import resources

pixmap = QPixmap(":/newPrefix/download.jpeg")

The PyQt4 Resource System and The Qt Resource System

在PyQt5中,我们应该在命令行中编写

pyrcc5 -o resources.py resource/resources.qrc

因为,我们需要在代码中生成一个resource.py来导入。现在我们可以输入

import resources

在我们的 python 代码中

除了上述精彩的答案之外,如果您还希望能够从 QtCreator 本身设置图标(而不是必须在代码中执行 say setWindowIcon(QIcon('://images/app_icon.ico')) 行),您可以这样做:

pyrcc5 -o resources_rc.py resources.qrc cd ui pyuic5 -o dialog.py dialog.ui

(请注意 pyuic5 出于某种原因自动导入 resources_rc 而不是 resources;因此是上面指定的新名称)

您确定的地方:

...
</tabstops>
 <resources>
  <include location="../resources.qrc"/>
 </resources>
<connections>
...

大约出现在您的 dialog.ui 文件中(在 tabstopsconnections 之间)。我认为要自动获取它,您可以创建一个虚拟 C++ 项目并将您的 .ui 文件添加到该虚拟项目,然后将一个新的 Qt 资源文件添加到该项目。完成后,您可以删除所有保留 .ui 文件和 .qrc 文件的内容。如果您碰巧将 resources.qrc 复制到另一个目录,则关闭并重新打开 dialog.ui 文件将提示您输入新位置。

现在您可以在 QtCreator 的 属性 资源管理器中设置资源:windowIcon > Choose Resource > (click on the root) > (your files should show up now) > (select app_icon.ico).


我刚刚检查了一个新创建的 mainwindow.ui,如果您在 Qt Creator 中以 Text Edit 模式打开文件,它会显示 <resource />斯图比群岛简单地插入那里(使用其他程序)出于某种原因,在 Notepad++ 中打开新创建的 .ui 文件没有显示它。


关闭和重新打开文件时,您必须实际关闭文件(不是 "Reload" - 不起作用)并再次打开它。然后 "add image from resources" 对话框中的资源根将是非空的。