【问题标题】:Importing resource file to PyQt code?将资源文件导入 PyQt 代码?
【发布时间】:2016-08-09 00:08:18
【问题描述】:

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

我不完全确定如何将资源文件导入 Python 代码,因此 pixmap 显示没有任何问题。


我将所有文件都放在同一个目录中,我创建了 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 资源文件在同一目录下,我还需要指定完整路径吗?

【问题讨论】:

    标签: python qt pyqt pyqt4


    【解决方案1】:

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

    pyrcc4 -o resources.py resources.qrc
    

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

    import resources
    

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

    例子

    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    
    import resources
    
    pixmap = QPixmap(":/newPrefix/download.jpeg")
    

    The PyQt4 Resource SystemThe Qt Resource System

    【讨论】:

    • 我还是看不到像素图,是不是里面有什么问题?我的所有东西都在同一个目录中,所以我不完全确定,如何将图像添加到资源中,然后在代码中使用它。
    • 它仍然不显示,但是,我需要使用那个导入首选项吗?我试过了,它给了我这个错误:File "project.py", line 7, in &lt;module&gt; class Window(QtGui.QMainWindow): NameError: name 'QtGui' is not defined
    • 这是我在主页功能中添加的内容:def home(self): pic = QtGui.QLabel() pic.setGeometry(0, 0, 400, 300) pic.setPixmap(QtGui.QPixmap(":/images/download.jpeg")) self.show()
    • 如果你从PyQt4.QtGui import *使用,你必须使用QLabel等等而不使用QtGui。如果你使用from PyQt4 import QtGui,你必须使用QtGui.QLabel等等。
    • 图像仍然,不会显示,这是我在 qrc 文件中更改的内容,在编译它之前 &lt;RCC&gt; &lt;qresource prefix="images"&gt; &lt;file&gt;download.jpeg&lt;/file&gt; &lt;/qresource&gt; &lt;/RCC&gt; 并且我将其称为 pixmap,如下所示:pic.setPixmap(QtGui.QPixmap(":/images/download.jpeg"))@Fabio
    【解决方案2】:

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

    pyrcc5 -o resources.py resource/resources.qrc
    

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

    import resources
    

    在我们的python代码中

    【讨论】:

      【解决方案3】:

      除了上述精彩的答案之外,如果您还希望能够在 QtCreator 本身中设置图标(而不必在代码中使用 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 的 Property 资源管理器中设置资源:windowIcon &gt; Choose Resource &gt; (click on the root) &gt; (your files should show up now) &gt; (select app_icon.ico)


      我刚刚检查了一个新创建的mainwindow.ui,如果您在 Qt Creator 中以 Text Edit 模式打开文件,它会显示&lt;resource /&gt; 存根的位置。只需插入那里(使用其他程序)由于某种原因在 Notepad++ 中打开新创建的 .ui 文件没有显示它。


      关闭和重新打开文件时,您必须实际关闭文件(不是“重新加载” - 不起作用)并再次打开它。那么“从资源添加图片”对话框中的资源根目录将是非空的。

      【讨论】:

        猜你喜欢
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多