pyqt的学习(三)----鼠标点击和按键处理

QmyChartView 类的说明
QChart 和 QChartView 是基于 Graphics View 结构的绘图类。要对一个 QChart 图表进行鼠
标和按键操作,需要在 QChartView 类里对鼠标和按键事件进行处理,这就需要自定义一个
从 QChartView 继承的类。
QmyChartView 类是从 QChartView 类继承的用作图表的视图组件,实现了鼠标、按键事件
的处理,能够在鼠标移动时发射信号 mouseMove(),鼠标框选中一个矩形区域时放大显示此
区域,通过按键进行图表缩放和移动操作。
class QmyChartView(QChartView):
    mouseMove=pyqtSignal(QPoint)##鼠标移动
    
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setDragMode(QGraphicsView.DragMode.RubberBandDrag)
        
        self.__beginPoint=QPoint()
        self.__endPoint=QPoint()
在类中,定义了一个信号 mouseMove(QPoint)。在 mouseMoveEvent 里发射此信号并传递
鼠标光标处的屏幕坐标,用于在主窗口里实现鼠标在图表上移动时显示当前位置的坐标。
在构造函数中,通过 setDragMode()将视图组件鼠标拖动选择方式设置为“橡皮框”形式。这
样,在图标上按下鼠标框选时,随着鼠标拖动会显示一个矩形选择框,如图所示:

(一) 鼠标的事件函数:
 

    def mousePressEvent(self, event):##鼠标单击
        if event.button()==Qt.MouseButton.LeftButton:
            self.__beginPoint=event.pos()
        super().mousePressEvent(event)
        
    def mouseMoveEvent(self, event):##鼠标移动
        point=event.pos()
        self.mouseMove.emit(point)
        super().mouseMoveEvent(event)
        
    def mouseReleaseEvent(self, event):##鼠标框选放大,右键恢复
        if event.button()==Qt.MouseButton.LeftButton:
            self.__endPoint=event.pos()
            rectF=QRectF()
            rectF.setTopLeft(self.__beginPoint.toPointF())
            rectF.setBottomRight(self.__endPoint.toPointF())
            self.chart().zoomIn(rectF)
        elif event.button()==Qt.MouseButton.RightButton:
            self.chart().zoomReset()#鼠标右键释放,resetZoon
(1)mousePressEvent:在鼠标左键或右键按下时触发的事件函数。self.__beginPoint 记录
左键按下时,鼠标在视图组件中的位置。
(2)mouseMoveEvent: 鼠标在图表上移动时触发的事件函数,通过 event.pos()获取鼠标
在视图组件中的坐标 point,然后发射信号 mouseMove(point)。在使用 QmyChartView 类组 件的主窗口里,可以定义槽函数与此信号关联,通过传递的参数将视图坐标变换为图表的坐
标,从而实现鼠标光标处的坐标数值实时显示。
(3)mouseReleaseEvent:在鼠标左键或右键释放时触发的事件函数。若是鼠标左键释放,
则用 self.__endPoint 记录鼠标位置坐标。self.__beginPoint 和 self.__endPoint 就定义了鼠标
框选的矩形区域,用关联的 QChart 组件的 zoomIn(QRectF)函数对这个矩形区域进行放大。
注意这里rectF的类型是QRectF,所以需要用toPointF将__beginPoint和__endPoint从QPoint
类型转换为 QPointF 类型。
(二)键盘按键事件函数
 def keyPressEvent(self, event):
            key=event.key()
            if key ==Qt.Key.Key_Plus:# +
                self.chart().zoom(1.2)
            elif key ==Qt.Key.Key_Minus:# -
                self.chart().zoom(0.8)
            elif key==Qt.Key.Key_Left: #向左
                self.chart().scroll(10, 0)
            elif key ==Qt.Key.Key_Right:#向右
                self.chart().scroll(-10, 0)
            elif key==Qt.Key.Key_Up:#向上
                self.chart().scroll(0, -10)
            elif key==Qt.Key.Key_Down:#向下
                self.chart(0, 10)
            elif key==Qt.Key.Key_PageUp:#pageup
                self.chart().scroll(0, -50)
            elif key==Qt.Key.Key_PageDown:#pagedown
                self.chart().scroll(0, 50)
            elif key ==Qt.Key.Key_Home:#home
                self.chart().zoomReset()
keyPressEvent 是键盘按键按下时触发的事件函数,从 event.key()可以获得按下按键的名称,
判断按键然后做出缩放、移动等动作
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值