通过代码执行鼠标动作

在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的参数不好自己写,一般是从别的事件中获取。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值