pyqt5 QtChart XY 坐标轴 并保存成 图片

150 篇文章 15 订阅

QtChart

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

from PyQt5.QtChart import QChartView, QLineSeries, QChart

class MyMainWindow(QMainWindow):

    def __init__(self, parent=None):
        super(MyMainWindow, self).__init__(parent)
        self.resize(380, 300)
        self.menubar = QMenuBar(self)
        self.menubar.setGeometry(QRect(0, 0, 380, 23))
        self.menu = QMenu(self.menubar)
        self.menu_2 = QMenu(self.menubar)

        self.setMenuBar(self.menubar)

        self.statusbar = QStatusBar(self)
        self.statusbar.setObjectName("statusbar")
        self.setStatusBar(self.statusbar)

        self.toolBar = QToolBar(self)
        self.toolBar.setObjectName("toolBar")
        self.addToolBar(Qt.TopToolBarArea, self.toolBar)

        self.action_open = QAction(self)
        self.action_open.setObjectName("action_open")
        self.action_store = QAction(self)
        self.action_store.setObjectName("action_store")
        self.action_close = QAction(self)
        self.action_close.setObjectName("action_close")

        self.actionX = QAction(self)
        self.actionX.setObjectName("actionX")
        self.actionY = QAction(self)
        self.actionY.setObjectName("actionY")
        self.actionZ = QAction(self)
        self.actionZ.setObjectName("actionZ")

        self.menu.addAction(self.action_open)
        self.menu.addAction(self.action_store)
        self.menu.addAction(self.action_close)

        self.menu_2.addAction(self.actionX)
        self.menu_2.addAction(self.actionY)
        self.menu_2.addAction(self.actionZ)

        self.menubar.addAction(self.menu.menuAction())
        self.menubar.addAction(self.menu_2.menuAction())

        self.toolBar.addAction(self.action_open)
        self.toolBar.addAction(self.action_store)
        self.toolBar.addAction(self.action_close)

        self.toolBar.addAction(self.actionX)
        self.toolBar.addAction(self.actionY)
        self.toolBar.addAction(self.actionZ)

        _translate = QCoreApplication.translate
        self.setWindowTitle(_translate("MainWindow", "可视化编程与测绘"))
        self.menu.setTitle(_translate("MainWindow", "文件"))
        self.menu_2.setTitle(_translate("MainWindow", "绘图"))
        self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
        self.action_open.setText(_translate("MainWindow", "打开"))
        self.action_store.setText(_translate("MainWindow", "保存"))
        self.action_close.setText(_translate("MainWindow", "关闭"))
        self.actionX.setText(_translate("MainWindow", "X方向"))
        self.actionY.setText(_translate("MainWindow", "Y方向"))
        self.actionZ.setText(_translate("MainWindow", "Z方向"))

        self.action_close.triggered.connect(self.call_back_action_close_func)

        self.action_open.triggered.connect(self.call_back_action_open_func)

        self.action_store.triggered.connect(self.call_back_action_store_func)

        self.actionX.triggered.connect(self.call_back_actionX_func)
        self.actionY.triggered.connect(self.call_back_actionY_func)
        self.actionZ.triggered.connect(self.call_back_actionZ_func)




        self.chart = QChart()
        #chart.setTitle("Line Chart 1")

        self.series = QLineSeries(self.chart)

        self.chart.addSeries(self.series)
        self.chart.createDefaultAxes()  # 创建默认轴


        self.chart.legend().hide()

        self.view = QChartView(self.chart)
        self.view.setRenderHint(QPainter.Antialiasing)  # 抗锯齿
        self.setCentralWidget(self.view)

    def call_back_actionX_func(self):
        print("call_back_actionX_func")
        self.chart.setTitle("X方向变形曲线图")
        self.series.clear()
        self.series.append(1, 32.5801)
        self.series.append(2, 32.5786)
        self.series.append(3, 32.5784)
        self.series.append(4, 32.5812)
        self.series.append(5, 32.5782)
        self.series.append(6, 32.5791)
        self.series.append(7, 32.5788)
        self.series.append(8, 32.5788)
        self.series.append(9, 32.5745)

        chart_axisY = self.chart.axisY()

        chart_axisY.setRange(32.57, 32.585)

        chart_axisX = self.chart.axisX()
        chart_axisY = self.chart.axisY()
        chart_axisX.setTickCount(13)
        chart_axisX.setMinorTickCount(1)
        chart_axisX.setRange(0, 24)
        chart_axisX.setLabelFormat("%u")
        chart_axisX.setGridLineVisible(False)


    def call_back_actionY_func(self):
        print("call_back_actionY_func")
        self.chart.setTitle("Y方向变形曲线图")
        self.series.clear()
        self.series.append(1, -52.7876)
        self.series.append(2, -52.7892)
        self.series.append(3, -52.7845)
        self.series.append(4, -52.7852)
        self.series.append(5, -52.7863)
        self.series.append(6, -52.7852)
        self.series.append(7, -52.7841)
        self.series.append(8, -52.7817)
        self.series.append(9, -52.7833)
        self.series.append(10, -52.7854)
        self.series.append(11, -52.7841)
        self.series.append(12, -52.7826)
        self.series.append(13, -52.7852)
        self.series.append(14, -52.7863)
        self.series.append(15, -52.7845)
        self.series.append(16, -52.7834)
        self.series.append(17, -52.7846)

        chart_axisY = self.chart.axisY()

        chart_axisY.setRange(-52.7900, -52.7800)

        chart_axisX = self.chart.axisX()
        chart_axisY = self.chart.axisY()
        chart_axisX.setTickCount(13)
        chart_axisX.setMinorTickCount(1)
        chart_axisX.setRange(0, 24)
        chart_axisX.setLabelFormat("%u")
        chart_axisX.setGridLineVisible(False)


    def call_back_actionZ_func(self):
        print("call_back_actionZ_func")
        self.chart.setTitle("Z方向变形曲线图")
        self.series.clear()
        self.series.append(1, 0.1369)
        self.series.append(2, 0.1380)
        self.series.append(3, 0.1411)
        self.series.append(4, 0.1393)
        self.series.append(5, 0.1394)
        self.series.append(6, 0.1354)
        self.series.append(7, 0.1414)
        self.series.append(8, 0.1375)
        self.series.append(9, 0.1359)
        self.series.append(10, 0.1327)
        self.series.append(11, 0.1358)
        self.series.append(12, 0.1361)
        self.series.append(13, 0.1339)
        self.series.append(14, 0.1325)
        self.series.append(15, 0.1416)
        self.series.append(16, 0.1395)
        self.series.append(17, 0.1412)

        chart_axisY = self.chart.axisY()

        chart_axisY.setRange(0.1300, 0.1450)

        chart_axisX = self.chart.axisX()
        chart_axisY = self.chart.axisY()
        chart_axisX.setTickCount(13)
        chart_axisX.setMinorTickCount(1)
        chart_axisX.setRange(0, 24)
        chart_axisX.setLabelFormat("%u")
        chart_axisX.setGridLineVisible(False)


    def call_back_action_store_func(self):
        print("call_back_action_store_func")

        # 用 QFileDialog 获取保存文件的全部路径(包括文件名和后缀名)
        fileName2, ok2 = QFileDialog.getSaveFileName(self, "文件保存", "/", "图片文件 (*.png);;(*.jpeg)")

        """
        下面用 Pyqt5 的截屏方法,截取指定 QChartView 上显示的东西;缺点,若显示的图像变形,
        则截图也会变形!
        """
        screen = QApplication.primaryScreen()
        pix = screen.grabWindow(self.view.winId())
        pix.save(fileName2)


    def call_back_action_open_func(self):
        print("call_back_action_open_func")

    def call_back_action_close_func(self):
        print("call_back_action_close_func")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWin = MyMainWindow()
    myWin.show()
    sys.exit(app.exec_())

显示效果如下:

在这里插入图片描述

参考程序:

https://github.com/PyQt5/PyQt/blob/master/QtChart/CustomXYaxis.py
自定义坐标轴

2

Python3.x+PyQtChart实现数据可视化界面(PyQtChart绘图;还有保存图片)和业务逻辑分离案例01_自己写的,有UI界面源代码

https://blog.csdn.net/higher80/article/details/82253227

1、代码下载地址:https://download.csdn.net/download/higher80/10655324

2、用到的工具:pyqtchart,安装方法是 pip 方法安装;安装时要求较高版本的pyqt5(也是用pip方法安装;用conda方法安装后无效,也就是没有安装上),而较高版本的pyqt5则要求较高版本的python(比如python3.6.5)。我安装的是Anaconda3(Anaconda3 - 5.2.0,64位版本;Python3.6.5)版本。

3、参考资料:

(1)搜索 qt chart、qchart、pyqtchart等关键字;注意多看看qt下qt chart或qchart的资料,因为网上关于pyqtchart的资料较少,但pyqtchart的语法与qt chart或qchart的语法非常接近。

(2)上面1中下载代码里面有pyqtchart官网提供的案例;也有网上找到的案例,比如网址:https://github.com/892768447/PyQt

(3)pyqtchart官网:https://www.riverbankcomputing.com/software/pyqtchart/download/

(4)qt chart官网:https://doc.qt.io/qt-5/qtcharts-index.html;qt chart官网有许多qt写的案例,也可以参考。

5、实现的功能:

(1)图片随窗体大小自适应变化;保存图片是用的屏幕截图截取方式实现的,且保存图片时可以保存地址。

(2)上面1里面的文件夹“网上其它案例”或“官方标准案例”里,还有实现鼠标追踪案例(见下图2)。

#####其他效果
在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值