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

问题描述 投票:0回答:1

我试过:

        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 对象中,但没有定论。
你有什么想法吗?

python pyqt mouseevent qmainwindow
1个回答
3
投票

鼠标事件最初由窗口管理器处理,然后将它们传递给屏幕该区域中的任何窗口。因此,如果该区域没有 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_())
© www.soinside.com 2019 - 2024. All rights reserved.