I need to edit features in my pyqgis plugin's QgsMapCanvas
instantiated as self.canvas
. I have enabled snapping options and triggered vertex tool via python code, but other than the cursor changing to CrossCursor
, nothing happens when it hovers over the layer to be edited on the custom QgsMapCanvas
. There is no QgsActionVertexTool
which is similar to QgsActionPan
. I feel that iface.actionVertexTool()
might not be suitable because that might be only for the QgisInterface()
, but am open for corrections.
Here is the code.
from qgis.core import QgsSnappingConfig, QgsTolerance, QgsMapLayer
from qgis.gui import QgsMapTool
from qgis.utils import iface
from .feedback import Feedback
class GeoManipulation():
def __init__(self, canvas, project, view, console, button):
super().__init__()
self.canvas = canvas
self.project = project
self.view = view
self.console_out = console
self.gm_edit_button = button
self.setSnapConfig()
self.vertexEditor()
def setSnapConfig(self):
snap_config = QgsSnappingConfig()
snap_config.setEnabled(True)
snap_config.setMode(snap_config.SnappingMode.AllLayers)
snap_config.setType(snap_config.Vertex)
snap_config.setTolerance(12)
snap_config.setUnits(QgsTolerance.Pixels)
snap_config.setIntersectionSnapping(True)
snap_config.setSelfSnapping(True)
self.project.setTopologicalEditing(True)
self.project.setSnappingConfig(snap_config)
def vertexEditor(self):
self.cur_lyr = self.view.currentLayer()
vertex_action = iface.actionVertexTool()
vertex_tool = QgsMapTool(self.canvas)
vertex_tool.setAction(vertex_action)
self.canvas.setMapTool(vertex_tool)
if self.gm_edit_button.isChecked():
if self.cur_lyr == None or self.cur_lyr.type() != QgsMapLayer.VectorLayer:
Feedback().error(self.console_out, "Please Select an Asset Layer")
self.gm_edit_button.setChecked(False)
else:
print(self.cur_lyr)
self.cur_lyr.startEditing()
# vertex_action.trigger()
vertex_tool.activate()
else:
Feedback().success(self.console_out, "Edits to Current Layer Successfully Saved")
self.cur_lyr.commitChanges()
vertex_tool.deactivate()
I also tried with QgsMapToolEdit
, but it did not work.