目次

2. プラグインを作ってみる

環境整備にはeclipseの連携とか、やらなあかんことは色々ありますが、 まずはモチベーションを上げるため、ちょろっとプラグインを作ってみます。

今、私のマシンには、OSGeo4Wの下と、OSGeo4W64の下に、それぞれ1つずつQGISが入っているのですが、 だって64bitマシンだしーという安易な理由で、OSGeo4W64の下のQGISを使うことにします。


2.1. ソースをどこに置くか

プラグインは、置き場所が決まっていて、そこに置いたら勝手にプラグインやと思われるようです。

共通プラグイン

C:/OSGeo4W64/apps/qgis/python/plugins

インストールした時点で、この下に5つのフォルダが存在しました。

[db_manager][fTools][GdalTools][MetaSearch][processing]

それぞれが1つのプラグインです。

ユーザプラグイン

C:/Users/banjo/.qgis2/python/plugins

インストールした時点では、pythonの下には何もありませんでした。

自分で、pluginsというフォルダを作り、この下にプラグイン1つに付き1つのフォルダを作成していきます

今回は、ユーザプラグインの下にsample1というフォルダを作って、その下にプラグインを作ることにしました

C:/Users/banjo/.qgis2/python/plugins/sample1

2.2. __init__.py

プラグインの開始プログラムです。

このファイルは名前が決まっています。これ以外は、ファイル名は自由です。

# -*- coding: utf-8 -*-

#==================
#
# だら$らいぶらりぃ~ QGISはじめてのプラグイン さんぷる1
#
#==================

# main.py から mainクラスをインポートして、呼び出す

def classFactory(iface):
  from .main import main
  return main(iface)

わたしはPythonも初めてなので、軽く説明を入れておきます。

1行目の:

# -*- coding: utf-8 -*-

は、日本語を使うときには必ず入れてください。

そして、後で出てきますが、日本語の前に:

u"日本語"

のように、uをつけてください。


それから、Pythonでは、Cの{}や、Pascalのbegin endのようなものはありません。

段落の下げ位置で、くくりが決まります。

段落下げにタブとスペースを混ぜてしまうと、エラーが出てしまうことがあります。(すげー悩みました^^;)

自分でどちらかに決めてやりましょう。

2.3. main.py

開始プログラムから呼び出しているプログラムです。

さんぷる1メニューがクリックされたら、シェイプファイルを選択するダイアログが開いて、 ベクタレイヤに追加して、画面に表示するようにしてみました。

# -*- coding: utf-8 -*-

from PyQt4.QtCore import *
from PyQt4.QtGui import *


# リソース読み込み
try:
  from . import resource
except ImportError:
  pass


# メインクラス
class main:

  # Pythonのクラスを作ったら(多分)必ず要るやつ
  def __init__(self, iface):
    self.iface = iface

  # QGISのメニューに表示するときに呼ばれるやつ
  def initGui(self):
    # 小メニューを作る
    self.action = QAction(QIcon(":/icon/marubatu32.png"), u"さんぷる1", self.iface.mainWindow())
    self.action.setObjectName("sample1")

    # 大メニューを作る
    self.menu = QMenu(self.iface.mainWindow())
    self.menu.setObjectName("daradara")
    self.menu.setTitle(u"だら$")
    self.menu.addAction(self.action)

    # 大メニューをメニューバーに挿入する
    menuBar = self.iface.mainWindow().menuBar()
    menuBar.insertMenu(self.iface.firstRightStandardMenu().menuAction(), self.menu)

    # 小メニューを押したとき実行するよう、トリガーをセット
    QObject.connect(self.action, SIGNAL("triggered()"), self.run)

  # メニューを無効にしたときに呼ばれるやつ
  # (ここは、まだ未完成。ちゃんと消せてなくて、変な情報が残ってるみたい。わかったら修正する)
  def unload(self):
    #メニューを消す
    self.menu.deleteLater()

  # メニューでクリックした時、実行されるやつ。処理本体。
  def run(self):
    # ファイル選択ダイアログを表示
    fil = QFileDialog.getOpenFileName(None, "Open Shapefile", ".", "Shapefiles (*.shp)")
    filInfo = QFileInfo(fil)

    # レイヤ追加
    self.iface.addVectorLayer(fil, filInfo.fileName(), "ogr")

2.4. metadata.txt

プラグイン管理ツールで表示される情報を書き記しておくファイル

[general]
name=だら$ さんぷる1
description=だら$らいぶらりぃ~ QGISはじめてのプラグイン さんぷる1
qgisMinimumVersion=2.0.0
version=0.0.1
icon=marubatu32.png
author=banjo
homepage=http://www.areanine.gr.jp/~banjo/

2.5. 以上でファイルは揃いました

上記3ファイルが揃えば、プラグインは完成です。

C:/Users/banjo/.qgis2/python/plugins/sample1 の下に、3つとも置きます。

後、metadata.txtで指定しているアイコンファイルも、同じところに置きました。

リソースファイルもここに置きますが、なくても構いません。作り方はあとで説明します。

2.6. プラグインを有効にする

  1. QGISを起動する

  2. メニューの[プラグイン]クリック

  3. [プラグインの管理とインストール]クリック

  4. 以下の画面が表示されます。 [だら$ さんぷる]を探しだして、チェックボックスをクリックしてください

    少し時間がかかりますが、[×]になったら成功です。

    どこかにエラーがあったら、詳細画面に「壊れています」などと書かれます。

_images/sample1.jpg

2.7. プラグインを実行する

プラグインが有効になって、メニューに登録する部分のプログラムも正しければ、 以下のように画面に表示されます。

今回は、メニューバーに挿入してみました。

アイコンバーや、[プラグラグイン]メニューの中に突っ込むこともできます。

_images/sample1_2.jpg

クリックすると、ファイル選択画面が開くので、はじめて日記で作った(かな?)日本地図を選んでみました。


_images/sample1_3.jpg
ちゃんと動きました。うれしいです!(^^)