Creating a mouse coordinate tracking tool

In this recipe, we'll build a tool that tracks and displays the mouse coordinates in real time. This tool will also demonstrate how to interact with the status bar of a QGIS application.

Getting ready

We will use the application framework from the Adding standard map tools to the canvas recipe, so complete that recipe first. We will extend that application with the coordinate tracking tool. A complete version of this application is available in the code samples provided with this book. It will also be beneficial to study the other two tool-related recipes in this chapter, A map tool to draw polygons or lines on the canvas and A map tool to draw points on the canvas, as this recipe builds on them as well.

How to do it...

We will add an event filter to the basic standalone QGIS application and use it to grab the current mouse coordinates as well as update the status bar. To do this, we need to perform the following steps:

  1. As the last line of our application's __init__ method, insert the following line to create a default status bar message when the application loads:
    self.statusBar().showMessage(u"x: --, y: --")
    
  2. Immediately after the application's __init__ method, we will add the following event filter method:
    defeventFilter(self, source, event):
    ifevent.type() == QEvent.MouseMove:
    ifevent.buttons() == Qt.NoButton:
    pos = event.pos()
    x = pos.x()
    y = pos.y()
    p = self.canvas.getCoordinateTransform().toMapCoordinates(x, y)
    self.statusBar().showMessage(u"x: %s, y: %s" % (p.x(), p.y()))
    else:
    pass
    returnQMainWindow.eventFilter(self, source, event)
    
  3. In the MainApp class, as the second-last line, we must install the event filter using the following code:
    self.installEventFilter(wdg)
    

How it works...

In the Qt framework, in order to watch out for mouse events, we must insert an event filter that allows us to monitor all the events in the application. Within the default event filter method, we can then process any event we want. In this case, we watch for any movements of the mouse.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset