通过代码执行鼠标动作

  • Post author:
  • Post category:其他


在pyqt种,可以不去手动执行动作,而是通过代码执行一些我完全没执行过的鼠标动作。

关键是QMouseEvent这个类,这是鼠标动作类,包含描述鼠标事件的参数,用于描述鼠标事件。

先定义一个鼠标事件

releaseEvent = QMouseEvent(QEvent.MouseButtonRelease,event.localPos(),event.screenPos(),
                               Qt.LeftButton,Qt.NoButton,event.modifiers())

QMouseEvent的初始化

初始化方法有4种, 我主要用的是这两种

第一种

成员函数描述:

QMouseEvent::QMouseEvent ( Type type, const QPoint & position, Qt::MouseButton button,

Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers )

参数type必须是QEvent::MouseButtonPress,QEvent::MouseButtonRelease,QEvent::MouseButtonDblClick, or QEvent::MouseMove其中的一个。

参数position是鼠标指针相对于窗口的位置,

参数button作为鼠标事件所代表的值可以从QT::MouseButton的枚举列表中查找。如果参数type是一次MouseMove事件,那么相对应的button取值就该为QT::NoButton.

在一次QT事件过程中,鼠标和键盘的状态位可以通过参数buttons和modifiers指定。

buttons和button都是在QT::MouseButton的枚举列表中查找,基本上buttons和button的值一样。

通过globalPos()的返回值来初始化QCursor::pos()有时候不是很恰当,可以通过其他的构造函数来显示指定全局坐标值。

(附注:要区分参数button 和 参数buttons)

第二种:

参数type必须是QEvent::MouseButtonPress,QEvent::MouseButtonRelease,QEvent::MouseButtonDblClick, or QEvent::MouseMove其中的一个。

参数localpos是鼠标指针相对于窗口的位置,screenPos是鼠标相对于屏幕的位置

buttons,button,modifiers见上。

例子

    #点击事件
    def mousePressEvent(self, QGraphicsSceneMouseEvent):
        if QGraphicsSceneMouseEvent.button() == Qt.MidButton:
            self.middleMouseButtonPress(QGraphicsSceneMouseEvent)
        elif QGraphicsSceneMouseEvent.button() == Qt.LeftButton:
            self.leftMouseButtonPress(QGraphicsSceneMouseEvent)
        elif QGraphicsSceneMouseEvent.button() == Qt.RightButton:
            self.rightmouseButtonPress(QGraphicsSceneMouseEvent)
    def middleMouseButtonPress(self, event):

        # mid_Release=QMouseEvent(event.MouseButtonRelease,event.localPos(),event.screenPos(),Qt.LeftButton,Qt.NoButton,event.modifiers())
        self.setDragMode(QGraphicsView.ScrollHandDrag)
        # super().mouseReleaseEvent(mid_Release)
        # 产生一个鼠标按下左键的假事件
        fakeEvent = QMouseEvent(event.MouseButtonPress, event.localPos(), event.screenPos(),
                                Qt.LeftButton,Qt.LeftButton, event.modifiers())
        super().mousePressEvent(fakeEvent)

这个fakeEvent是我自己建立的点击事件,fakeEvent的大多数参数来自event,event也是个点击事件,是mousePressEvent()函数(mousePressEvent函数是类本身有的)自带的事件。

fakeEvent的参数不好自己写,一般是从别的事件中获取。

再将定义好的事件传入继承父类的最初的鼠标事件中,这个事件就算执行了。



版权声明:本文为m0_54256484原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。