QGIS插件:导入资源(resources_rc)文件时出现问题-插件未加载-PATH问题?


12

我正在构建qgis插件,但找不到该错误的解决方案。

File "/usr/lib/python2.7/dist-packages/qgis/utils.py", line 478, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
ImportError: No module named resources_napoved_rc

对于每个要问的人,我都建立了python资源文件:

pyrcc4 -o resources_napoved_rc.py resources_napoved.qrc

我仍然找不到使它起作用的方法。我总是得到同样的错误。

在脚本之上,我有:

import resources_napoved_rc.py

我直接从qtbuilder使用ui文件。有什么想法要前进吗?我假设这一定是某种路径问题或类似问题。


No module named resources_napoved_rc而且pyrcc4 -o resources_napoved_rc.py resources_napoved.qrc还是一个打字错误?
基因

不,这不是错字。我添加了rc后缀,因为它看起来总是在文件末尾寻找rc,即使您传入file.qrcUI文件也是如此。(非常奇怪)我也尝试了所有可能的组合:pyrcc4 -o resources_napoved_rc.py resources_napoved_rc.qrc
格雷格

尝试不添加.py文件就将其导入import resources_napoved_rc
Martin

Answers:


18

此问题是由于uic无法正常工作引起的。我不确定为什么,但是我可以显示症状和解决方法。

初始插件.ui文件具有一个空resources元素:

<resources/>

当您在QtDesigner中编辑插件的资源时,将更改为:

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

这是问题的根源。如果将那个include标记中的.qrc文件resourcesXXX.qrc更改为,则错误将更改为No module named resourcesXXX_rc

注意:以下内容基于在“ QGIS插件”构建器的所有字段中输入“ test”的插件构建。

test_dialog.py文件中,以下几行编译.ui文件:

FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'test_dialog_base.ui'))

这是发生错误的地方。

编辑.ui文件以将其更改回,<resources/>问题已解决。 直到再次在QtDesigner中编辑对话框。.ui每次编辑对话框后,都必须对文件进行此编辑。

解决方案是将插件更改为像早期版本的插件一样工作。这涉及替换_dialog.py文件中的uic调用和类行。替换这些行:

FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'test_dialog_base.ui'))

class testDialog(QtGui.QDialog, FORM_CLASS):

与:

from test_dialog_base import Ui_testDialogBase

class testDialog(QDockWidget, Ui_testDialogBase):

您现在必须运行

pyuic4 -x test_dialog_base.ui > test_dialog_base.py

首次创建插件时,以及每次使用QtDesigner编辑插件对话框时。这是旧的插件方法。

您是选择编辑.ui文件还是pyuic4每次运行。


MaryBeth,`resources元素应为空元素,而不是该元素的结束标记。
mariotomo

9

您可以通过执行以下操作来避免编辑.ui文件或进行编译等:

import sys
sys.path.append(os.path.dirname(__file__))
FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'test_dialog_base.ui'), resource_suffix='')

resource_suffix默认为“ _rc”,这就是为什么它一直在寻找“ resources_rc”的原因。(当然,如果您确实想使用resources_rc,则可以始终将其保留为默认值)

并将.ui文件的路径附加到sys.path允许python查找resources.py。您可能会认为它可以解决,因为您当前的目录应该位于sys.path(以及当前目录中的其他导入文件)中,但事实并非如此。我还没有深入研究它才能确切地找到原因。


8

经过3小时的尝试,我终于将其修复。有人说QT Designer添加

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

到您的UI文件。我只是删除了这些行,并且一切正常(资源在GUI中可见)


QGIS 2.14仍然是一个问题,因此,这个问题和沃思·卢茨的回答很有帮助!
AndreasMüller17年

2

我认为这个问题的简短答案是人们将项目直接加载到QGIS中而不是运行:

make deploy

resources.py仅在第一次make deploy运行后才生成文件。


2

这是我解决问题的方法:

  • 运行-> cmd

  • 转到插件生成器的位置(即:c:/users/rafik_pc/.qgis2/python/plugins/pluginbuilder)

  • 键入以下命令:

    pyrcc4 -py2 resources.qrc -o resources.py

(我使用-py2是因为我正在使用python 2.7)

  • 重新启动QGIS。

  • 完成。


0

最后对我有用的是使用当我使用插件构建器创建软件包时使用的原始资源,并将其用于插件的所有其他对话框中。我仍然不知道为什么在重新加载插件时插件的主图标会更改,但是我仍然在其他对话框中得到图形。

我希望由于多种原因这会有所不同。对于构建简单的插件,此方法可能有效。这是一个组织的东西。

由于我对此资源有很多问题,因此我建立了resources.py和resources_rc.py,这可能就是为什么在重新加载时遇到问题的原因。

我没有时间来解决这个问题,但是QGIS开发团队应该注意这个问题,因为它阻止人们制作漂亮的插件:D

我最终要做的是简单:

import resources

在调用UI类之前。

感谢您帮助我解决这个问题。

PS:您必须先“编译”资源,然后才能将它们添加到* .ui文件中,并在所有插件对话框中使用相同的资源-> import资源。我希望这可以帮助别人。


0

使用执行相同的命令

须藤pyrcc4 -o resources_rc.py resources.qrc

会工作的

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.