将资源文件导入到PyQt代码中?

23

我看了Qt的纪录片和很多与此不太相似的问题,但我仍然没有弄清楚如何做到这一点。

我不确定如何将资源文件导入Python代码,以便pixmap可以正常显示。


我把所有文件都放在同一个目录下,创建了qrc文件,并使用以下命令进行编译:rcc -binary resources.qrc -o res.rcc 生成资源文件。

我导入了res_rcc,但是标签上的pixmap仍然没有显示:

import res_rcc


这是我在qrc文件中的代码:

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

问题:

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

3个回答

29

对于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")

请参阅PyQt4资源系统Qt资源系统


它仍然不会显示,但是我需要使用那个导入偏好设置吗?我尝试了那些并且它给了我这个错误:File "project.py", line 7, in <module> class Window(QtGui.QMainWindow): NameError: name 'QtGui' is not defined - ShellRox
这是我在主页函数中添加的代码:def home(self): pic = QtGui.QLabel() pic.setGeometry(0, 0, 400, 300) pic.setPixmap(QtGui.QPixmap(":/images/download.jpeg")) self.show() - ShellRox
1
如果你使用了 from PyQt4.QtGui import *,那么你必须使用 QLabel 等控件的时候不需要加上 QtGui.。但是如果你使用了 from PyQt4 import QtGui,则必须使用 QtGui.QLabel 等控件。 - Fabio
是的,它生成了文件,但在控制台上没有打印任何内容,我的home函数代码有问题吗? - ShellRox
让我们在聊天中继续这个讨论。链接:http://chat.stackoverflow.com/rooms/109364/discussion-between-fabio-and-shellrox。 - Fabio
显示剩余3条评论

13

在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文件时会提示您新位置的位置。

现在,您可以从Qt Creator中的属性资源管理器中设置资源:windowIcon > 选择资源 >(单击根)>(现在应该显示您的文件)>(选择app_icon.ico)


我刚检查了新创建的mainwindow.ui文件,在Qt Creator的文本编辑模式下打开文件,它会显示您应该插入<resource />桩的位置。只需在其中插入(使用其他程序),不知何故,用Notepad++打开新创建的.UI文件时没有显示它。


当关闭并重新打开文件时,您必须实际上关闭文件(而不是“重新加载”-无法工作),然后再次打开它。然后,“从资源中添加图像”对话框中的资源根将不为空。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接