3

I want to get x/y co-ordinates of point on mouse click for a point and need to use those co-ordinates to evaluate other value as per others module already define .

How can I get x y coordinates on mouse click in QGIS and print those in PyQGIS.

  • You need QgsMapToolEmitPoint class to do that (please, see my answer). – xunilk Aug 30 '17 at 1:05
7

You need QgsMapToolEmitPoint class to do that. Following code works well for that purpose:

from qgis.gui import QgsMapToolEmitPoint

def display_point( pointTool ): 

    print '({:.4f}, {:.4f})'.format(pointTool[0], pointTool[1])

# a reference to our map canvas 
canvas = iface.mapCanvas() 

# this QGIS tool emits as QgsPoint after each click on the map canvas
pointTool = QgsMapToolEmitPoint(canvas)

pointTool.canvasClicked.connect( display_point )

canvas.setMapTool( pointTool )

However, if you prefer a class, following code can also be used:

from qgis.gui import QgsMapToolEmitPoint

class PrintClickedPoint(QgsMapToolEmitPoint):
    def __init__(self, canvas):
        self.canvas = canvas
        QgsMapToolEmitPoint.__init__(self, self.canvas)

    def canvasPressEvent( self, e ):
        point = self.toMapCoordinates(self.canvas.mouseLastXY())
        print '({:.4f}, {:.4f})'.format(point[0], point[1])

canvas_clicked = PrintClickedPoint( iface.mapCanvas() )
iface.mapCanvas().setMapTool( canvas_clicked ) 
  • This worked, thank you. May be you could add how to unset the listener: unsetMapTool(canvas_clicked) – Rodrigo E. Principe Jul 29 at 14:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.