在QMainWindow外捕获鼠标位置(无需单击)

时间:2015-04-01 19:26:25

标签: qt pyqt

我试过了:

        self.installEventFilter(self)

        desktop= QApplication.desktop()
        desktop.installEventFilter(self)

使用:

    def eventFilter(self, source, event):
        if event.type() == QEvent.MouseMove:
            print(event.pos())
        return QMainWindow.eventFilter(self, source, event)

在QMainWindow对象中,但没有结论 你有什么想法吗?

1 个答案:

答案 0 :(得分:2)

鼠标事件最初由窗口管理器处理,然后窗口管理器将它们传递给屏幕该区域中的任何窗口。因此,如果该区域没有Qt窗口,您将无法获得任何事件(包括鼠标事件)。

但是,仍然可以通过轮询跟踪光标位置:

from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    cursorMove = QtCore.pyqtSignal(object)

    def __init__(self):
        super(Window, self).__init__()
        self.cursorMove.connect(self.handleCursorMove)
        self.timer = QtCore.QTimer(self)
        self.timer.setInterval(50)
        self.timer.timeout.connect(self.pollCursor)
        self.timer.start()
        self.cursor = None

    def pollCursor(self):
        pos = QtGui.QCursor.pos()
        if pos != self.cursor:
            self.cursor = pos
            self.cursorMove.emit(pos)

    def handleCursorMove(self, pos):
        print(pos)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 500, 200, 200)
    window.show()
    sys.exit(app.exec_())