• 实战PyQt5: 158-QChart图表之线条缩放显示


    线条缩放

    在数据量比较的折线图或者曲线图,受图表本身显示区域大小的限制,不能精细地显示某一小块区域的数据变化,QChartView提供了方法setRubberBand()可以实现一种类似放大镜的功能,可以将局部区域的数据放大到整个图表显示区域中显示。这样就可以方便地实现在图表中对图形序列的局部放大观察。

    线条缩放显示样例

    示例显示了如何使用鼠标利用QRubberBand 来创建自定义的缩放效果。完整代码如下:

    1. import sys,math
    2. from PyQt5.QtCore import Qt, QTimer, QRandomGenerator, QEvent, QPointF
    3. from PyQt5.QtGui import QPainter, QPen
    4. from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsView
    5. from PyQt5.QtChart import QChart, QChartView,QLineSeries, QValueAxis
    6.    
    7. class MyChartView(QChartView):
    8.     def __init__(selfchartparent = None):
    9.         super(MyChartViewself).__init__(chartparent)
    10.         self.isTouching = False
    11.         self.setRubberBand(QChartView.RectangleRubberBand)
    12.            
    13.     def keyPressEvent(selfevent):
    14.         if event.key() == Qt.Key_Plus:
    15.             self.chart().zoomIn()
    16.         elif event.key() == Qt.Key_Minus:
    17.             self.chart().zoomOut()
    18.         elif event.key() == Qt.Key_Left:
    19.             self.chart().scroll(-10, 0)
    20.         elif event.key() == Qt.Key_Right:
    21.             self.chart().scroll(10, 0)
    22.         elif event.key() == Qt.Key_Up:
    23.             self.chart().scroll(0, 10)
    24.         elif event.key() == Qt.Key_Down:
    25.             self.chart().scroll(0, -10)
    26.         else:
    27.             QGraphicsView.keyPressEvent(selfevent)
    28.  
    29. class DemoZoomLineChart(QMainWindow):
    30.     def __init__(selfparent=None):
    31.         super(DemoZoomLineChartself).__init__(parent)   
    32.         
    33.          # 设置窗口标题
    34.         self.setWindowTitle('实战 Qt for Python: 线条缩放演示')      
    35.         # 设置窗口大小
    36.         self.resize(480, 360)
    37.         
    38.         self.createChart()
    39.     
    40.     def createChart(self):
    41.         series = QLineSeries()
    42.         for i in range(500):
    43.             pnt = QPointF(imath.sin(math.pi * i / 50) * 100 + QRandomGenerator.global_().bounded(20))
    44.             series.append(pnt)
    45.         
    46.         chart = QChart()
    47.         chart.setTitle('线条缩放显示')
    48.         chart.addSeries(series)
    49.         chart.setAnimationOptions(QChart.SeriesAnimations)
    50.         chart.legend().hide()
    51.         chart.createDefaultAxes()
    52.         
    53.         chartView =MyChartView(chart)
    54.         chartView.setRenderHint(QPainter.Antialiasing)
    55.         self.setCentralWidget(chartView)
    56.       
    57. if __name__ == '__main__':
    58.     app = QApplication(sys.argv)
    59.     window = DemoZoomLineChart()
    60.     window.show()
    61.     sys.exit(app.exec())   

    运行效果如下图:

     曲线缩放演示

    本文知识点

    • 使用QRubberBand 创建自定义的图表缩放效果。

    前一篇:实战PyQt5:157-QChart图表之动态样条曲线

  • 相关阅读:
    JSONException: A JSONObject text must begin with ‘{‘ at character 0
    太空射击第09课:精灵动画
    RT-Thread 内核移植(学习)
    [Linux] 网络套接字编程之实现简单的TCP网络程序(下)
    Android,InputMethod.java简单认识
    响应式动画登录
    《优化接口设计的思路》系列:第1篇—什么是接口缓存
    python 爱心代码
    Web大学生网页作业成品——环保垃圾分类网站设计与实现(HTML+CSS+JavaScript) web前端开发技术 web课程设计 网页规划与设计
    基于Springboot的影城管理系统(有报告)。Javaee项目,springboot项目。
  • 原文地址:https://blog.csdn.net/seniorwizard/article/details/125615616