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.
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.
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:
__init__
method, insert the following line to create a default status bar message when the application loads:self.statusBar().showMessage(u"x: --, y: --")
__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)
MainApp
class, as the second-last line, we must install the event filter using the following code:self.installEventFilter(wdg)
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.