La meilleure façon de créer un nouvel outil comme l'outil Sélectionner une entité unique est d'hériter de la QgsMapTool
classe. Lorsque votre outil est actif, ce qui peut être défini à l'aide de QgsMapCanvas::setMapTool
tout événement de clavier ou de clic que le canevas obtient sera transmis à votre outil personnalisé.
Voici une QgsMapTool
classe de base
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
Vous pouvez faire ce dont vous avez besoin canvasReleaseEvent
, etc.
Pour activer cet outil, il vous suffit de:
tool = PointTool(qgis.iface.mapCanvas())
qgis.iface.mapCanvas().setMapTool(tool)
class PointTool(QgsMapTool): NameError: name 'QgsMapTool' is not defined
. Des idées?from qgis.gui import QgsMapTool
en hautNone
. Je voudrais enregistrer ce que l'utilisateur a sélectionné en leQgsMapCanvas.mapTool()
restaurant après avoir terminé.Je pense que vous pouvez le faire avec une combinaison de l'utilisation de QGIS "canvasClicked" mais aussi de SIGNAL / SLOTS pour gérer la réponse:
Pas essayé mais devrait vous donner plus d'informations pour commencer à regarder. Il y a un tutoriel ici où quelqu'un l'utilise pour construire un plugin très basique.
la source
QgsMapToolEmitPoint
classe intégrée qui vous donnera le départ de base pour un outil. Une bonne façon de se connecter aux signaux dans PyQt utilise cette syntaxeself.clickTool.canvasClicked.connect(self.handleMouseDown)
Essayez quelque chose comme ça (c'est pour sélectionner un point):
la source
self.clickTool.canvasClicked.connect(self.handleMouseDown)
syntaxe pour me connecter aux signaux car c'est beaucoup plus propre.