QGIS Pythonプラグインの一部の関数とファイルの目的は何ですか?


8

QGISプラグインビルダーで作成されたQGISプラグインのアーキテクチャ、ワークフロー、および生成されたファイル間のリンクを理解しようとしています。できれば、図表がいいです。

また、Pythonコードで次の関数が何を行うかを知っておくと役立ちます。QGISプラグインの作成は初めてです。

  1. __init__( self, iface )
  2. tr( self, message )
  3. add_action( self )
  4. initGui( self )
  5. unload( self )
  6. run( self )

あるいくつかの情報は、以下のリンクで:docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/...が。残念ながら、QGISプラグインの開発には「ダミーガイド」があるとは思いません(確かにプラグインで作成できます)。
ジョセフ

申し訳ありませんが、上記のURLはサーバー上で見つかりませんでした。
User123、2015年

これは、クラスの作成に関する純粋なPythonの質問です(一般的かつPyQt4を使用)。ここでの唯一のPyQGIS質問は、iface(QGISインターフェース)とは何かです。Pythonを知っていれば、スクリプトは説明が必要ないようです(すべての#の説明を含む)
gene

結構です。各関数がqgisをどのように反映するのかと思っています。たとえば、run関数のコード変更がプラグインに反映されるとします。
User123、2015年

ストレンジは、URLが前に働いていた...これを試してみてください。docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/...
ジョセフ・

回答:


16

PyQGISクックブックは、ファイルはQGISのプラグインに共通しているものを説明しています。ご覧のとおり、最小限のプラグインを実行するために必要なファイルは3つだけです。

  • __init__.py
  • metadata.txt
  • mainPlugin.py

この__init__.pyファイルにより、QGISはプラグインフォルダーがPythonモジュールであることを認識できます。classFactory(iface)QGISがプラグインを初期化するために使用する関数を含み、mainPlugin.pyファイルにあるメインのPluginクラスを利用する必要があります。

metadata.txt プラグインのメタデータ、つまりプラグインの名前、作成者、ライセンス、バージョン、ホームページ、バグトラッカー、リポジトリなどを指定する場所です。

mainPlugin.py他の方法で名前が付けられている可能性があります。これはで参照されているファイル__init__.pyで、質問で列挙した関数が含まれています。このファイルはプラグインの中核だと思います。


QGISプラグインビルダーについては、公式ドキュメントを読んで構造を理解することをお勧めします。プラグイン開発の基本を学んでいる間、気にしたくない多くのものが作成されるので、私は実際にはそのようなプラグインを使用しないことを好みます。

完全に理解しているプラ​​グインから始めることをお勧めします。つまり、非常に基本的な(最小限でも)プラグイン構造から始めて、必要な場合のみ、および基本をマスターするときに複雑さを追加します。

一方、列挙した関数の目的は次のとおりです。

  1. __init__( self, iface )

    これはプラグインのコンストラクタです。QGISがフォルダーをPythonプラグインとして認識すると、__init__()メソッドが実行され、インターフェースオブジェクトifaceがプラグインに渡されるため、後でQGISにアクセスできます。

    このメソッドを使用してiface(QGISコンポーネントへのエントリポイントになるため)への参照を保存し、プラグインの他の関数で使用する他の変数を初期化する必要があります。

  2. tr( self, message )

    これは、文字列から翻訳を取得するPython関数です。もちろん翻訳を提供する必要がありますが、それは他のQtファイル(つまり、.tsファイル)で行います。

    一般に、英語以外の言語をサポートする場合を除いて、この関数は必要ありません。新しいPyQGIS開発者にとって、これは間違いなく優先事項ではありません。

  3. add_action( self )

    これは、QGIS Plugin Builderを介して生成されたプラグインでのみ見た機能です。プラグインGUIのセットアップに役立ちます。個人的にはプラグインで使用していません。

  4. initGui( self )

    これは、QGIS内でプラグインのGUIを設定する方法です。ここでは、QGISプラグインのツールバーのボタン、カスタムツールバー、既存のQGISメニュー内のボタン、または(推奨されません)新しいカスタムメニューのいずれかを指定します。

    これは、プラグインボタン(またはその他のコントロール)と機能の間にSIGNAL / SLOT接続を確立するのにも適しています。

  5. unload( self )

    これは、QGIS GUIからプラグインウィジェット(ボタン、メニューなど)を削除する方法です。

    これは、で接続したSIGNALSとSLOTSを切断するのにも良い場所ですinitGui( self )

  6. run( self )

    これがプラグインの主な方法です。ここに、ユーザーがプラグインのボタンをクリックしたときに実行されるコードを配置します。概して、現在のQGISプロジェクトから一部のデータを取得することから始めて、編集、処理、またはレポート作成を行います。それは完全にあなた次第です。

    プラグインにダイアログがある場合は、これを開いて、ユーザーがダイアログとの対話を開始できるようにする必要があります。ダイアログロジックは通常、コードを配布し、メンテナンスとカプセル化を優先するために、他のPythonファイルで処理されます。

    run()SIGNAL / SLOT接続を設定するのに適した場所ではないことに注意してください。設定すると、プラグインのダイアログを開くたびに設定され、QGISプラグインの奇妙な動作のように(SLOT)関数が複数回トリガーされます。私の関数は二度トリガー


最後に、QGISプラグインのプログラミングを学ぶ最良の方法は、他のプラグインのソースコードを読むことです。単純なものから始めて、習得したら、より複雑なものに進んでください。

QGISプラグインの動作を理解するのに役立つ(非常にシンプルな)デモプラグインを作成しました。こちらからアクセスできます。READMEファイルにインストール手順があります。プラグインは、メッセージボックスを通じて、要求した各関数がいつ実行されたかを通知します。


1
明確な説明をしてくれたgcarrilloに感謝します。初心者には非常に役立つでしょう。
User123、2015

1
runメソッドに関する質問。onRunという名前も見ました。ネーミングは問題ではないと考えることはできますが、通常、習慣が尽きるという言葉が含まれていますか?
BritishSteel 2015

2
右@BritishSteel、そのようなメソッドに好きな名前を付けることができます。run()一種の慣習です。通常、initGui()プラグインボタンのクリックとrun()メソッドの間の接続を設定するので、別の名前を付けたい場合は、この接続で使用されるスロットも更新する必要があります。のようなものself.action.triggered.connect(self.myCustomRun)
ヘルマン・カリージョ

1
これは素晴らしいです。これも信じられないほど便利です。
ジョセフ

@gcarrillo:3番目のポイントで、「これはプラグインビルダーを介して生成されたプラグインで見られる関数です」と述べました。プラグインビルダー以外のプラグインを開発する他の方法は何ですか?
User123、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.