Лучший способ создать новый инструмент, такой как инструмент Select Single Feature, - это наследовать от QgsMapTool
класса. Когда ваш инструмент активен, и его можно настроить с помощью QgsMapCanvas::setMapTool
любых событий клавиатуры или щелчка, которые получает холст, они будут переданы в ваш пользовательский инструмент.
Вот основной QgsMapTool
класс
class PointTool(QgsMapTool):
def __init__(self, canvas):
QgsMapTool.__init__(self, canvas)
self.canvas = canvas
def canvasPressEvent(self, event):
pass
def canvasMoveEvent(self, event):
x = event.pos().x()
y = event.pos().y()
point = self.canvas.getCoordinateTransform().toMapCoordinates(x, y)
def canvasReleaseEvent(self, event):
#Get the click
x = event.pos().x()
y = event.pos().y()
point = self.canvas.getCoordinateTransform().toMapCoordinates(x, y)
def activate(self):
pass
def deactivate(self):
pass
def isZoomTool(self):
return False
def isTransient(self):
return False
def isEditTool(self):
return True
Вы можете делать то, что вам нужно canvasReleaseEvent
, и т. Д.
Чтобы активировать этот инструмент, просто сделайте:
tool = PointTool(qgis.iface.mapCanvas())
qgis.iface.mapCanvas().setMapTool(tool)
class PointTool(QgsMapTool): NameError: name 'QgsMapTool' is not defined
. Есть идеи?from qgis.gui import QgsMapTool
наверхуNone
. Я бы сохранил то, что выбрал пользователь, используяQgsMapCanvas.mapTool()
восстановление после того, как вы закончите.Я думаю, что вы можете сделать это с помощью комбинации QGIS "canvasClicked", а также SIGNAL / SLOTS для обработки ответа:
Не пытался, но должен дать вам больше информации, чтобы начать смотреть. Здесь есть учебник, где кто-то использует его для создания очень простого плагина.
источник
QgsMapToolEmitPoint
класс, который даст вам базовый старт для инструмента. Хороший способ подключиться к сигналам в PyQt - использовать этот синтаксисself.clickTool.canvasClicked.connect(self.handleMouseDown)
Попробуйте что-то вроде этого (это чтобы выбрать точку):
источник
self.clickTool.canvasClicked.connect(self.handleMouseDown)
синтаксис для подключения к сигналам, так как он намного чище.