Die beste Möglichkeit, ein neues Werkzeug wie das Werkzeug "Einzelfeature auswählen" zu erstellen, besteht darin, von der QgsMapTool
Klasse zu erben . Wenn Ihr Werkzeug aktiv ist und mit festgelegt werden kann QgsMapCanvas::setMapTool
, werden alle Tastatur- oder Klickereignisse, die die Zeichenfläche erhält, an Ihr benutzerdefiniertes Werkzeug übergeben.
Hier ist eine einfache QgsMapTool
Klasse
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
Sie können tun, was Sie brauchen canvasReleaseEvent
, usw
Um dieses Tool zu aktivieren, gehen Sie wie folgt vor:
tool = PointTool(qgis.iface.mapCanvas())
qgis.iface.mapCanvas().setMapTool(tool)
class PointTool(QgsMapTool): NameError: name 'QgsMapTool' is not defined
. Irgendwelche Ideen?from qgis.gui import QgsMapTool
an der Spitze verwendenNone
. Ich würde speichern, was der Benutzer ausgewählt hat,QgsMapCanvas.mapTool()
indem ich es wieder herstelle, nachdem Sie fertig sind.Ich denke, Sie können dies mit einer Kombination aus der Verwendung von QGIS "canvasClicked", aber auch SIGNAL / SLOTS tun, um mit der Antwort fertig zu werden:
Nicht ausprobiert, sollte Ihnen aber weitere Informationen geben, die Sie sich ansehen sollten. Hier gibt es ein Tutorial, in dem jemand damit ein sehr einfaches Plugin erstellt.
quelle
QgsMapToolEmitPoint
Klasse, die Ihnen den grundlegenden Start für ein Werkzeug gibt. Eine gute Möglichkeit, eine Verbindung zu Signalen in PyQt herzustellen, ist die Verwendung dieser Syntaxself.clickTool.canvasClicked.connect(self.handleMouseDown)
Versuchen Sie so etwas (um einen Punkt auszuwählen):
quelle
self.clickTool.canvasClicked.connect(self.handleMouseDown)
Syntax verwenden, um eine Verbindung zu Signalen herzustellen, da sie viel sauberer ist.