QGISのPythonプラグイン作成 –アクションの追加–

今回はQGISでPythonプラグインを作成するの続編です。

前回は空のプラグインをQGISに追加するというものでした。

前回のままでは何もできないので
プラグインを実行するためのアクション(アイコン)と処理を追加していきます。
アクションとは、赤枠で囲んでいる物のことです。

pluginActionEmpasize

今回ではUIに触れます。

QGISはUIがQtで作られています。
UIに触るときには、Qtの関数に触れることになります。
QGISの関数はQtの関数を継承した物が多いので、よく触ることになります。
Qtの関数を知っていると、できることが増えるので覚えていきましょう。

 

編集するファイルは、plugin.pyのみです。

プラグインの読み込み時に、メニューとツールバーにアイコンを追加していきます。

まずは必要な関数をインポートします。

# Qtの関数
from PyQt4 import QtCore
from PyQt4 import QtGui

import os

次にプラグインの読み込み時に、実行されるinitGuiに書き加えていきます。

icon_path = os.path.dirname(__file__) + u'\icon/qgis-icon.png'

表示するアイコンの画像を指定します。
__file__でpyファイルの位置を取得し、os.path.dirnameでディレクトリ名を取得しています。
画像はQGISのアイコンを使用しますqgis-icon

self.action = QtGui.QAction(QtGui.QIcon(icon_path), "pluginTemple", self.iface.mainWindow())

ツールバーやメニューに追加できるようにQActionを作成します。
QActionの引数は、アイコンに使う画像, 名前, 親になるウィンドウ
画像はQt上で使用できるようにQIconクラスにします。
名前は適当なものにしました。
親になるウィンドウとして、iface.mainWindowでQGISの大元のウィンドウを取得して、指定します。

self.iface.addToolBarIcon(self.action)
self.iface.addPluginToMenu("pluginMenu txt", self.action)

作成したQActionをツールバーとメニューに追加します。
追加には、QGISの関数を使用しています。
今回はプラグインのメニューとツールバーに追加しますが、
他のところにも追加でき、追加する関数も用意されています。

結果、下記のinitGuiになります。

 
def initGui(self):
    icon_path = os.path.dirname(__file__) + u'\icon/qgis-icon.png'
    self.action = QtGui.QAction(QtGui.QIcon(icon_path), "pluginTemple", self.iface.mainWindow())
    QtCore.QObject.connect(self.action, QtCore.SIGNAL("triggered()"), self.run)
    self.iface.addToolBarIcon(self.action)
    self.iface.addPluginToMenu("pluginMenu txt", self.action)

この状態でプラグインを追加すると、アイコンが追加されます。

pluginAction

 

このままではプラグインをアンロードされても、アイコンが残ったままになります。
アンロードされたときに、ツールバーとメニューに追加してアクションを取り除くようにしておきます。

def unload(self):
    self.iface.removePluginMenu("pluginMenu txt", self.action)
    self.iface.removeToolBarIcon(self.action)

最後に追加したアクションがクリックされると
プラグインに追加した関数を実行するようにします。

まず実行される関数を作成します。

def run(self):
    QtGui.QMessageBox.information(self.iface.mainWindow(), 'Plugin', 'Hello World')

runという名前で関数を作成します。
関数の内容はメッセージボックスを出すものです。
QtにQMessageBoxというクラスを使って、メッセージボックスを出します。
引数は、親ウィンドウ、ウィンドウタイトル、メッセージ

        
QtCore.QObject.connect(self.action, QtCore.SIGNAL("triggered()"), self.run)

次にアイコンがクリックされたら、関数を実行するようにします。
Qtにはシグナルが発信されるにあわせて、関数を実行するように設定できます。
引数として、シグナルを発信するオブジェクト、反応するシグナル、実行する関数

initGuiのQActionを作成した後ろに追加します。

これでアイコンをクリックすると、メッセージボックスが出るようになります。

pluginResult

最終的なplugin.pyが以下のものになります。

# -*- coding: utf-8 -*-
from PyQt4 import QtCore
from PyQt4 import QtGui
import os


class plugin(object):
    def __init__(self, iface):
        self.iface = iface

    def initGui(self):
        icon_path = os.path.dirname(__file__) + u'\icon/qgis-icon.png'
        self.action = QtGui.QAction(QtGui.QIcon(icon_path), "pluginTemple", self.iface.mainWindow())
        QtCore.QObject.connect(self.action, QtCore.SIGNAL("triggered()"), self.run)
        self.iface.addToolBarIcon(self.action)
        self.iface.addPluginToMenu("pluginMenu txt", self.action)

    def unload(self):
        self.iface.removePluginMenu("pluginMenu txt", self.action)
        self.iface.removeToolBarIcon(self.action)

    def run(self):
        QtGui.QMessageBox.information(self.iface.mainWindow(), 'Plugin', 'Hello World')

まだまだアイコンができてメッセージが表示できたところですが、
とりあえず今回はここまで。

コメントを残す

メールアドレスが公開されることはありません。