当前位置:   article > 正文

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

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

(一) 鼠标的事件函数:
 

  1. def mousePressEvent(self, event):##鼠标单击
  2. if event.button()==Qt.MouseButton.LeftButton:
  3. self.__beginPoint=event.pos()
  4. super().mousePressEvent(event)
  5. def mouseMoveEvent(self, event):##鼠标移动
  6. point=event.pos()
  7. self.mouseMove.emit(point)
  8. super().mouseMoveEvent(event)
  9. def mouseReleaseEvent(self, event):##鼠标框选放大,右键恢复
  10. if event.button()==Qt.MouseButton.LeftButton:
  11. self.__endPoint=event.pos()
  12. rectF=QRectF()
  13. rectF.setTopLeft(self.__beginPoint.toPointF())
  14. rectF.setBottomRight(self.__endPoint.toPointF())
  15. self.chart().zoomIn(rectF)
  16. elif event.button()==Qt.MouseButton.RightButton:
  17. 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 类型。
(二)键盘按键事件函数
  1. def keyPressEvent(self, event):
  2. key=event.key()
  3. if key ==Qt.Key.Key_Plus:# +
  4. self.chart().zoom(1.2)
  5. elif key ==Qt.Key.Key_Minus:# -
  6. self.chart().zoom(0.8)
  7. elif key==Qt.Key.Key_Left: #向左
  8. self.chart().scroll(10, 0)
  9. elif key ==Qt.Key.Key_Right:#向右
  10. self.chart().scroll(-10, 0)
  11. elif key==Qt.Key.Key_Up:#向上
  12. self.chart().scroll(0, -10)
  13. elif key==Qt.Key.Key_Down:#向下
  14. self.chart(0, 10)
  15. elif key==Qt.Key.Key_PageUp:#pageup
  16. self.chart().scroll(0, -50)
  17. elif key==Qt.Key.Key_PageDown:#pagedown
  18. self.chart().scroll(0, 50)
  19. elif key ==Qt.Key.Key_Home:#home
  20. self.chart().zoomReset()
keyPressEvent 是键盘按键按下时触发的事件函数,从 event.key()可以获得按下按键的名称,
判断按键然后做出缩放、移动等动作
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/838871
推荐阅读
相关标签
  

闽ICP备14008679号