[PyQt] why is mouseMoveEvent not reached in QMainWindow object

Christopher M. Nahler christopher.nahler at papermodels.at
Wed Apr 28 14:37:15 BST 2010


I am new to PyQt4 and trying to find my way ... here n the first example 
code I am successfully trying to display the mouse coordinates in a 
little app using a QWidget object as main window. Below is another try 
where I would like to display the mouse coordinates in the status bar of 
a QMainWindow object. Somehow I cannot reach the mouseMoveEvent 
function. What am I doing wrong?

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class MainWindow(QWidget):

     def __init__(self, parent=None):
         super(MainWindow, self).__init__(parent)

         self.setMouseTracking(True)
         self.text = QString()

         self.resize(400, 200)
         self.move(100, 100)
         self.setWindowTitle("MouseMoveTest")
         self.update()

     def paintEvent(self, event):
         painter = QPainter(self)
         painter.drawText(self.rect(), Qt.AlignCenter, self.text)

     def mouseMoveEvent(self, event):
         curPos = QCursor.pos()
         self.text = " mouse @ %d / %d " % (curPos.x(), curPos.y())
         self.update()

app = QApplication(sys.argv)
form = MainWindow()
form.show()
app.exec_()

--------------------------------------

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

SCREEN_BORDER = 100

class myLabel(QLabel):
     def __init__(self, parent=None):
         super(myLabel, self).__init__(parent)
         curPos = QCursor.pos()
         self.setText(" mouse @ %d / %d " % (curPos.x(), curPos.y()))
         self.update()

     def paintEvent(self, event):
         painter = QPainter(self)
         painter.drawText(self.rect(), Qt.AlignCenter, self.text())


class MainWindow(QMainWindow):

     def __init__(self, parent=None):
         super(MainWindow, self).__init__(parent)

         self.imageLabel = QLabel()
         self.setCentralWidget(self.imageLabel)

         # statusbar
         status = self.statusBar()
         status.setSizeGripEnabled(False)

         # add label for mouse coords in statusbar
         self.coordsLabel = myLabel()
         status.addPermanentWidget(self.coordsLabel)
         status.showMessage("Ready", 5000)


     def mouseMoveEvent(self, event):
         curPos = QCursor.pos()
         print curPos
         self.coordsLabel.setText(" mouse @ %d / %d " % (curPos.x(), 
curPos.y()))
         self.coordsLabel.update()
         super(MainWindow, self).mouseMoveEvent(event)

if __name__ == "__main__":

     import sys

     # setup application object
     app = QApplication(sys.argv)

     # create (parent) main window
     mainWindow = MainWindow()
     rect = QApplication.desktop().availableGeometry()
     mainWindow.setGeometry(rect.x() + SCREEN_BORDER,
                            rect.y() + SCREEN_BORDER,
                            rect.width() - 2 * SCREEN_BORDER,
                            rect.height() - 2 * SCREEN_BORDER)
     mainWindow.setMinimumSize(900, 700)
     
mainWindow.setWindowIcon(QIcon("D:\UDaten\pyqt\chap12\DesignerTest.bmp"))
     mainWindow.setWindowTitle("DesignerTest")
     mainWindow.show()

     # run application object
     sys.exit(app.exec_())


More information about the PyQt mailing list