2017-01-17 9 views
1

Я новичок в PyQt, и я пытаюсь использовать его для создания виджета, который возвращает положение мыши в реальном времени.Как вернуть координаты мыши в реальном времени?

Вот что у меня есть:

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_()) 

Я запутался о том, как сделать эту работу. Я установил отслеживание мыши в значение True, но не знаю, как применить фильтр событий. Любая помощь?

ответ

1

Функция QMouseEvent должна быть реализована, поскольку она выполняется при перемещении мыши.

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