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)。
#####其他效果