QGISでプラグインを作成する その5 キャンバスクリック時のイベントを拾う
真似します
どうやってやるのか調べていたら、山手様@月の杜工房にあったので真似させていただきました
QGIS API キャンバスクリック時のイベントを処理する
解説は月の杜工房様を見た方が詳しいです
ソース一式を貼っておきます
この記事で作成したソース一式です
click_test.zip
ソース一覧
必要なソースは
__init__.py clicktest.py dialog.py resources_rc.py ui_dialog.py
ですが、clicktest.pyの部分がイベントを拾うところなので、そこだけ載せます
キャンバスクリック時のイベントを拾う
キャンバスをクリックした際に、canvas内の座標と地理座標を取得して、dialogに表示するようにします
QgsMapCanvasクラスではマウスクリックのイベントを拾えません
QgsMapToolクラスを拡張して、キャンバスにセットして対応します
# -*- coding: utf-8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * from qgis.core import * from qgis.gui import * import resources_rc class clickTest: def __init__(self, iface): self.iface = iface def initGui(self): self.action = QAction(QIcon(":icon/qgis-icon.png"), "click Test", self.iface.mainWindow()) QObject.connect(self.action, SIGNAL("activated()"), self.run) self.iface.addToolBarIcon(self.action) self.iface.addPluginToMenu("&Click Test", self.action) self.toolClick = QgsMapToolClick(self.iface.mapCanvas()) def unload(self): self.iface.removePluginMenu("&Click Test", self.action) self.iface.removeToolBarIcon(self.action) def run(self): canvas = self.iface.mapCanvas() canvas.setMapTool(self.toolClick) #QgsMapToolクラスを拡張 #canvasPressEventに、キャンバス上の座標とその地理座標を表示する動作を追加 class QgsMapToolClick(QgsMapTool): def canvasPressEvent(self, event): #座標を表示するダイアログが作成されていない場合は作成 if not hasattr(self, 'dlg'): from dialog import Dialog self.dlg = Dialog() #キャンバス上の座標を取得 dPos = event.pos() #地理座標へ変換 mPos = self.toMapCoordinates(dPos) #ダイアログに座標を追加表示 self.dlg.ui.textArea.append(str(dPos.x()) + "," + str(dPos.y())) self.dlg.ui.textArea.append(str(mPos.x()) + "," + str(mPos.y())) #ダイアログを表示して、一番上に持ってきます self.dlg.show() self.dlg.raise_()