anorithのブログ

主にGIS系の記事を書く。

QGISプラグイン開発の勉強(1)

概要

参考

バージョン情報

  • QGISのバージョン: 3.22.14

プラグイン作成

最小構成のQGISプラグインを作ってプラグイン開発の勉強をしてみました。プラグイン作成は初めてです。上記の「qgis-minimal-plugin」を使用しました。

ネット上だとPlugin Builderを使った手順は多いですが、とりあえず触ってみる、という感じだけならこっちでも十分そうです(というか最初に手を付けるならこっちの方がいい気がします)。

とりあえずReadmeの手順に従ってプラグインフォルダの中にminimalフォルダを作成し、その中にmetadata.txt__init__.pyを作成します。

プラグインフォルダ:C:\Users\USER\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\minimal

両方中身もコピペしますが、__init__.pyはここにも書いておきます。

from PyQt5.QtWidgets import QAction, QMessageBox

def classFactory(iface):
    return MinimalPlugin(iface)


class MinimalPlugin:
    def __init__(self, iface):
        self.iface = iface

    def initGui(self):
        self.action = QAction('Go!', self.iface.mainWindow())
        self.action.triggered.connect(self.run)
        self.iface.addToolBarIcon(self.action)

    def unload(self):
        self.iface.removeToolBarIcon(self.action)
        del self.action

    def run(self):
        QMessageBox.information(None, 'Minimal plugin', 'Do something useful here')
  • classFactory__init__.pyに必須のクラスのようですね。
  • __init__, initGui, unloadプラグインクラスに必須のメソッドの様です。
  • initGuiプラグインが有効になったときに呼ばれるメソッドで、unloadプラグインが無効になったときに呼ばれるメソッドの様です。
  • どうやらここではGo!という名前(テキスト属性)でアクションを作成し、メッセージを表示するメソッドを紐づけてツールバーに追加するようです。

有効化してみます。

↓追加されました。アクションがプラグインツールバーに追加されたようです。

アクションをクリックすると以下のメッセージが表示されます。

とりあえず動作確認はできました。

変更の反映

自分でコードをいじって遊びたいのでコードの変更の反映方法を確認しておきます。

とりあえず「プラグインの管理とコンソール」で無効にして再度有効化すればよいようです。 initGUIの文字をGo?にしてみます。

    def initGui(self):
        self.action = QAction('Go?', self.iface.mainWindow())
        self.action.triggered.connect(self.run)
        self.iface.addToolBarIcon(self.action)

反映されました。

今のところQGISらしさが皆無なので、QGISのPythonAPIも使用してみます。 プラグイン開発2 · GIS実習オープン教材を参考にレイヤ数を表示してみます。

runの中身を以下のように変更して再度読み込みます。

    def run(self):
        cnt = self.iface.mapCanvas().layerCount()
        QMessageBox.information(None, 'Minimal plugin', f'layers: {cnt}')

レイヤ数が表示されました。

これだけで基本的なプラグインとして動かせるので色々遊べそうですね。