Skip to main content
 首页 » 编程设计

python之为什么 mouseMoveEvent 在 PyQt5 中什么都不做

2025年05月04日10luoye11

我尝试在PyQt5和Python3.5中使用mouseMoveEvent和mousePressEvent,但是当我点击鼠标时没有任何反应。我的代码如下,有什么问题吗?

from PyQt5 import QtWidgets, QtGui, QtCore 
 
class Window(QtWidgets.QMainWindow): 
    def __init__(self): 
        QtWidgets.QMainWindow.__init__(self) 
        widget = QtWidgets.QWidget(self) 
        layout = QtWidgets.QVBoxLayout(widget) 
        self.graphicsView = QtWidgets.QGraphicsView() 
        self.graphicsView.setCursor(QtCore.Qt.CrossCursor) 
        self.graphicsView.setObjectName("graphicsView") 
        layout.addWidget(self.graphicsView) 
        self.setCentralWidget(widget) 
 
    def mouseMoveEvent(self, event): 
        if event.buttons() == QtCore.Qt.NoButton: 
            print("Simple mouse motion") 
        elif event.buttons() == QtCore.Qt.LeftButton: 
            print("Left click drag") 
        elif event.buttons() == QtCore.Qt.RightButton: 
            print("Right click drag") 
 
    def mousePressEvent(self, event): 
        if event.button() == QtCore.Qt.LeftButton: 
            print("Press!") 
 
if __name__ == '__main__': 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    win = Window() 
    win.show() 
    sys.exit(app.exec_()) 

请您参考如下方法:

首先,您必须启用mouse-tracking :

        self.graphicsView.setMouseTracking(True) 

然后你可以使用QGraphicsView的子类:

class GraphicsView(QtWidgets.QGraphicsView):    
    def mouseMoveEvent(self, event): 
        if event.buttons() == QtCore.Qt.NoButton: 
            print("Simple mouse motion") 
        elif event.buttons() == QtCore.Qt.LeftButton: 
            print("Left click drag") 
        elif event.buttons() == QtCore.Qt.RightButton: 
            print("Right click drag") 
        super(GraphicsView, self).mouseMoveEvent(event) 
 
    def mousePressEvent(self, event): 
        if event.button() == QtCore.Qt.LeftButton: 
            print("Press!") 
        super(GraphicsView, self).mousePressEvent(event) 

或者安装一个事件过滤器:

        self.graphicsView.viewport().installEventFilter(self) 
        ... 
 
    def eventFilter(self, source, event): 
        if event.type() == QtCore.QEvent.MouseMove: 
            if event.buttons() == QtCore.Qt.NoButton: 
                print("Simple mouse motion") 
            elif event.buttons() == QtCore.Qt.LeftButton: 
                print("Left click drag") 
            elif event.buttons() == QtCore.Qt.RightButton: 
                print("Right click drag") 
        elif event.type() == QtCore.QEvent.MouseButtonPress: 
            if event.button() == QtCore.Qt.LeftButton: 
                print("Press!") 
        return super(Window, self).eventFilter(source, event)