waigani's diary

QGISを中心にFOSS4Gをいじくる

QGISでプラグインを作成する その1

参考にしたもの

QGIS Coding and Compilation Guideを参考にしています。

必要なファイル

最低限必要なファイルとして下記を作成します。

  • __init__.py
  • plugin.py
  • resources_rc.qrc(これは無くてもいいんですが、後々のため入れときます)

__init__.py

最初に呼び出されるファイルになります。
プラグインに関する情報とメインのクラスを記述します。

# -*- coding: utf-8 -*-
import os,sys
sys.path.append(r"C:\Program Files\eclipse\plugins\org.python.pydev.debug_1.6.3.2010100513\pysrc")
import pydevd
pydevd.settrace()

def name(): 
  return "プラグインテスト" 
def description():
  return "プラグインを追加出来るかテストです"
def version(): 
  return "1.0"
def qgisMinimumVersion():
  return "1.0"
def classFactory(iface): 
  from plugin import pluginTest
  return pluginTest(iface)

最初の数行はEclipseでのdebugのため記述しています。
name(),description(),version(),qgisMinimumVersion()の他にauthorName()も使えるようです。

メインの処理を記述(plugin.py)

ファイル名は__init__.pyのclassFactory()内の記述とあっていれば何でもいいです。
このファイルの中にメインのクラスを記述します。

# -*- coding: utf-8 -*-
#Import the PyOt and QGIS libraries
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
#Initialize Qt resources from file resources.py
import resources_rc

class pluginTest:

  def __init__(self, iface):
    #Save reference to the QGIS interface
    self.iface = iface

  def initGui(self):
    pass

  def unload(self):
    pass

__init__()の中身はお決まりで。QGISのinterfaceを保持しておきます。
メインのクラスに必ず必要な関数としては、

  • initGui()
  • unload()

になります。プラグインがloadされた際に実行されるのがinitGui()、unloadされる際に実行されるのがunload()になります。
とりあえず中身は空にしています。

resources_rc.qrc

iconや、form内で使用する画像へのpathを記述したファイルです。
icon用の画像"qgis-icon.png"を"icon"フォルダに用意してあるとして、下記のように記述しておきます。


    
        icon/qgis-icon.png
    

pythonのコードへ変換しておく必要がありますので、pyrcc4コマンドで変換しておきます。

pyrcc4 -o resources_rc.py resources_rc.qrc

QGISの実行

以上をQGISのユーザーpluginのディレクトリ、

 C:\Documents and Settings\ユーザー名\.qgis\python\plugins

プラグイン名のフォルダを作成し入れておきます。
QGISを実行すると、プラグインマネージャーに表示されます。

空っぽなので、選択しても何もおきないです。

ちなみにeclipseからdebugもちゃんと出来ます。