I implemented a maptool that draws a red cross on the point that is being right-clicked on. There are good how-tos, such as this topic : Programatically check for mouse click in PyQGIS?
But I happen to completely lose the left-click behaviour. This means that I cannot navigate through my layer with left click. I used a little trick ("iface.actionPan().trigger()") to get the pan action anyway, but it sets the mapTool to another object, an instance of mapToolPan. This later on causes various bugs, because I am calling methods that belong to my homemade PointTool class on a mapToolPan instance.
If the user right clicks on QGIS, the toolPan is set to my homemade PointTool class again.
Here is the code where I need help (I only implemented the canvasReleaseEvent because I only use this event) :
class PointTool(QgsMapTool):
def __init__(self, canvas):
QgsMapTool.__init__(self, canvas)
self.canvas = canvas
def canvasReleaseEvent(self, event):
""" Checks which click was used : if left, triggers the pan action, else, adds point. """
if event.button() == QtCore.Qt.RightButton:
# The right click triggers the point selection
x = event.pos().x()
y = event.pos().y()
self.clickedPoint = self.canvas.getCoordinateTransform().toMapCoordinates(x, y)
self.showPoint(self.clickedPoint)
self.canvas.refresh()
elif event.button() == QtCore.Qt.LeftButton:
print("release clicked left")
# The left click triggers the pan action
iface.actionPan().trigger()
def showPoint(self, point):
""" Adds point in qgis main window """
# Using a vertex marker to show the selected point as a red cross
m = QgsVertexMarker(self.canvas)
m.setCenter(point)
m.setColor(QColor(255,0,0))
m.setIconSize(10)
m.setIconType(QgsVertexMarker.ICON_X)
self.canvas.refresh()
How can I keep my right-click behaviour AND still have normal left-click behaviour?