Najlepszym sposobem na utworzenie nowego narzędzia, takiego jak Wybierz jedną cechę, jest dziedziczenie z QgsMapTool
klasy. Gdy narzędzie jest aktywne, co można ustawić za pomocą QgsMapCanvas::setMapTool
dowolnego zdarzenia klawiatury lub kliknięcia, płótno zostanie przekazane do niestandardowego narzędzia.
Oto podstawowa QgsMapTool
klasa
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
Możesz robić, co potrzebujesz canvasReleaseEvent
, itp
Aby ustawić to narzędzie jako aktywne, wystarczy:
tool = PointTool(qgis.iface.mapCanvas())
qgis.iface.mapCanvas().setMapTool(tool)
class PointTool(QgsMapTool): NameError: name 'QgsMapTool' is not defined
. Jakieś pomysły?from qgis.gui import QgsMapTool
na górzeNone
. Zapisałbym to, co wybrał użytkownik,QgsMapCanvas.mapTool()
przywracając go po zakończeniu.Myślę, że możesz to zrobić za pomocą kombinacji QGIS „canvasClicked”, ale także SIGNAL / SLOTS, aby poradzić sobie z odpowiedzią:
Nie wypróbowano, ale powinno dać ci więcej informacji na początek. Jest tu samouczek, w którym ktoś używa tego do zbudowania bardzo podstawowej wtyczki.
źródło
QgsMapToolEmitPoint
klasy, która da ci podstawowy start do narzędzia. Dobrym sposobem na połączenie się z sygnałami w PyQt jest użycie tej składniself.clickTool.canvasClicked.connect(self.handleMouseDown)
Spróbuj czegoś takiego (to jest wybór punktu):
źródło
self.clickTool.canvasClicked.connect(self.handleMouseDown)
składni do łączenia się z sygnałami, ponieważ jest ona znacznie czystsza.