2017-01-17 4 views
1

Ich bin neu in PyQt und ich versuche, es zu verwenden, um ein Widget zu erstellen, das die Position der Maus in Echtzeit zurückgibt.Wie können Mauskoordinaten in Echtzeit zurückgegeben werden?

Hier ist, was ich habe:

import sys 
from PyQt5.QtWidgets import (QWidget, QToolTip, 
    QPushButton, QApplication) 
from PyQt5.QtGui import QFont  

class MouseTracker(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.initUI() 
     self.setMouseTracking(True) 
     self.installEventFilter(self) 

    def initUI(self):   
     self.setGeometry(300, 300, 300, 200) 
     self.setWindowTitle('Mouse Tracker')  
     self.show() 

    def eventFilter(self, source, event): 
     if (event.type() == QtCore.QEvent.MouseMove and 
      event.buttons() == QtCore.Qt.NoButton): 
       pos = event.pos() 
       print('Mouse coords: (%d : %d)' % (pos.x(), pos.y())) 
     return QtGui.QWidget.eventFilter(self, source, event) 


if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = MouseTracker() 
    sys.exit(app.exec_()) 

Ich bin verwirrt, wie diese Arbeit zu machen. Ich habe die Mausverfolgung auf True gesetzt, bin mir aber nicht sicher, wie ich den Ereignisfilter anwenden soll. Irgendeine Hilfe?

Antwort

1

Die QMouseEvent-Funktion muss implementiert werden, da sie beim Verschieben der Maus ausgeführt wird.

import sys 
from PyQt5.QtWidgets import (QApplication, QLabel, QWidget) 


class MouseTracker(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.initUI() 
     self.setMouseTracking(True) 

    def initUI(self): 
     self.setGeometry(300, 300, 300, 200) 
     self.setWindowTitle('Mouse Tracker') 
     self.label = QLabel(self) 
     self.label.resize(200, 40) 
     self.show() 

    def mouseMoveEvent(self, event): 
     self.label.setText('Mouse coords: (%d : %d)' % (event.x(), event.y())) 


if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = MouseTracker() 
    sys.exit(app.exec_()) 

enter image description here

Verwandte Themen