Pyside6 / PyQt5 结合 Matplotlib 开发上位机
一、前言
实习需要将电机测试数据进行处理并可视化,需要开发上位机界面。上位机界面依据官网实例进行二次开发。
二、上位机界面
上位机界面如图所示,功能为根据输入 值绘制高斯曲线图。
三、代码说明
导入 sys, numpy, scipy, matplotlib, Pyside6 等功能包;
import sys import numpy as np from scipy.stats import norm from matplotlib.figure import Figure from matplotlib.backends.backend_qtagg import FigureCanvas from matplotlib.backends.backend_qtagg import NavigationToolbar2QT from PySide6.QtCore import Slot from PySide6.QtWidgets import ( QApplication, QWidget, QDoubleSpinBox, QVBoxLayout, QHBoxLayout, )
设计界面及槽函数
class PlotWidget(QWidget): def __init__(self, parent=None): super().__init__(parent) # create widgets 创建窗口 self.view = FigureCanvas(Figure(figsize=(5, 3))) # 绘图窗口大小 self.axes = self.view.figure.subplots() # 创建坐标轴区域 self.toolbar = NavigationToolbar2QT(self.view, self) # 创建绘图工具条 self.mu_input = QDoubleSpinBox() self.std_input = QDoubleSpinBox() self.mu_input.setPrefix("μ: ") self.std_input.setPrefix("σ: ") self.std_input.setValue(10) # Create layout input_layout = QHBoxLayout() # 横向布局 input_layout.addWidget(self.mu_input) input_layout.addWidget(self.std_input) vlayout = QVBoxLayout() # 纵向布局 vlayout.addWidget(self.toolbar) vlayout.addWidget(self.view) vlayout.addLayout(input_layout) self.setLayout(vlayout) # connect inputs with on_change method self.mu_input.valueChanged.connect(self.on_change) self.std_input.valueChanged.connect(self.on_change) self.on_change() @Slot() def on_change(self): """ Update the plot with the current input values """ mu = self.mu_input.value() # 获取输入值 std = self.std_input.value() x = np.linspace(-100, 100) # 生成坐标 y = norm.pdf(x, mu, std) self.axes.clear() self.axes.plot(x, y) # 绘制二维图 self.view.draw()
主函数显示界面。
if __name__ == "__main__": app = QApplication(sys.argv) w = PlotWidget() w.show() sys.exit(app.exec())
四、结论
可以根据此实例进行二次开发,只需要按照自己的需求进行相应的修改即可。