A melhor maneira de criar uma nova ferramenta como a ferramenta Selecionar recurso único é herdar da QgsMapTool
classe. Quando sua ferramenta estiver ativa, que pode ser definida usando QgsMapCanvas::setMapTool
, qualquer evento de teclado ou clique que a tela obtiver será passado para sua ferramenta personalizada.
Aqui está uma QgsMapTool
classe básica
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
Você pode fazer o que precisa canvasReleaseEvent
, etc
Para ativar esta ferramenta, basta:
tool = PointTool(qgis.iface.mapCanvas())
qgis.iface.mapCanvas().setMapTool(tool)
class PointTool(QgsMapTool): NameError: name 'QgsMapTool' is not defined
. Alguma ideia?from qgis.gui import QgsMapTool
no topoNone
. Eu salvaria o que o usuário selecionou usando aQgsMapCanvas.mapTool()
restauração depois que você terminar.Eu acho que você pode fazer isso com uma combinação do QGIS "canvasClicked", mas também SIGNAL / SLOTS para lidar com a resposta:
Não tentei, mas deve fornecer mais informações para você começar a olhar. Há um tutorial aqui onde alguém está usando isso para criar um plugin muito básico.
fonte
QgsMapToolEmitPoint
classe incorporada, que fornecerá o começo básico de uma ferramenta. Uma boa maneira de se conectar aos sinais em PyQt está usando esta sintaxeself.clickTool.canvasClicked.connect(self.handleMouseDown)
Tente algo assim (isto é para selecionar um ponto):
fonte
self.clickTool.canvasClicked.connect(self.handleMouseDown)
sintaxe para conectar aos sinais, pois é muito mais limpo.