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サフィックスを追加したのはfile.qrc、UIファイルを渡してもファイルの最後で常にrcを探しているように見えるためです。(非常に奇妙な)私はすべての可能な組み合わせも試してみました:pyrcc4 -o resources_napoved_rc.py resources_napoved_rc.qrc
グレッグ

このような.pyを使用せずにインポートしてみてくださいimport resources_napoved_rc
マーティン

回答:


17

この問題は、uic正常に動作しないことが原因です。正確な理由はわかりませんが、症状と回避策を示すことができます。

初期プラグイン.uiファイルには空のresources要素があります。

<resources/>

QtDesignerでプラグインのリソースを編集すると、次のように変更されます。

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

これが問題の原因です。そのインクルードタグの.qrcファイルをresourcesXXX.qrcエラーに変更すると、エラーが変更されNo module named resourcesXXX_rcます。

注:以下は、QGISプラグインビルダーのすべてのフィールドに「テスト」が入力されたプラグインビルドに基づいています。

test_dialog.pyファイルに次の行がコンパイル.uiファイルを:

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

これは、エラーが発生している場所です。

.uiファイルを編集して元に戻す<resources/>と、問題は解決します。 QtDesignerでダイアログを再度編集するまで.uiダイアログを編集するたびに、ファイルを編集する必要があります。

これに対する解決策は、以前のバージョンのプラグインが動作するようにプラグインを変更することです。これには、udia呼び出しと_dialog.pyファイルのクラス行の置換が含まれます。次の行を置き換えます。

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要素は、その要素の終了タグではなく、空の要素でなければなりません。
マリオトモ

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の問題なので、これとWorth Lutzの回答は大いに役立ちました!
アンドレアスミュラー

2

この問題に対する簡単な答えは、人々がプロジェクトを実行するのではなく、QGISに直接ロードしているということです。

make deploy

ファイルresources.pyは、最初のmake deploy実行後にのみ生成されます。


2

これは私が問題を修正した方法です:

  • Run-> cmd

  • プラグインビルダーの場所に移動します(例:c:/users/rafik_pc/.qgis2/python/plugins/pluginbuilder)

  • 次のコマンドを入力します。

    pyrcc4 -py2 resources.qrc -o resources.py

(Python 2.7を使用しているため、-py2を使用しました)

  • QGISを再起動します。

  • できました。


0

最終的に私のために働いたのは、プラグインビルダーでパッケージを作成したときに来た元のリソースを使用し、プラグインの他のすべてのダイアログでそれを使用することでした プラグインをリロードすると、プラグインのメインアイコンが変更される理由はまだわかりませんが、他のダイアログでグラフィックが表示されます。

これが多くの理由で異なることを望みます。シンプルなプラグインを構築するために、このアプローチはおそらく機能します。それは組織的なものです。

私はこのリソースで非常に多くの問題を抱えていたので、resources.pyとresources_rc.pyを作成したので、おそらくリロード時に問題が発生します。

私はこの問題に対処する時間はありませんが、QGIS開発チームは、人々が美しいプラグインを作成するのをブロックするため、それに注意を払う必要があります:D

私がやったことは簡単にすることです:

import resources

UIクラスを呼び出す前。

この混乱を助けてくれてありがとう。

PS:リソースを* .uiファイルに追加する前に「コンパイル」し、同じリソースを使用する必要があります->すべてのプラグインダイアログでリソースをインポートします。これが誰かの助けになることを願っています。


0

を使用して同じコマンドを実行します

sudo pyrcc4 -o resources_rc.py resources.qrc

それが動作します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.