pyside中绘制matplotlib图像,并可选择地保存

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QPushButton
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Matplotlib with PySide")
        
        # 创建一个Figure对象和Canvas
        self.figure = Figure()
        self.canvas = FigureCanvas(self.figure)
        
        # 创建一个NavigationToolbar
        self.toolbar = NavigationToolbar(self.canvas, self)
        
        # 创建一个按钮用于保存图表
        self.save_button = QPushButton("Save", self)
        self.save_button.clicked.connect(self.save_chart)
        
        # 创建一个垂直布局,并将Canvas、Toolbar和按钮添加到布局中
        layout = QVBoxLayout()
        layout.addWidget(self.canvas)
        layout.addWidget(self.toolbar)
        layout.addWidget(self.save_button)
        
        # 创建一个QWidget作为主窗口的中心部件,并设置布局
        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)
        
        # 在图表中绘制示例数据
        self.plot_data()
    
    def plot_data(self):
        # 清空Figure并绘制新图表
        self.figure.clear()
        ax = self.figure.add_subplot()
        ax.plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
        ax.set_xlabel('X')
        ax.set_ylabel('Y')
        
        # 更新Canvas
        self.canvas.draw()
    
    def save_chart(self):
        # 弹出保存对话框,选择保存图表的文件路径
        """
        在Python中,使用_作为变量名是一种约定,表示该变量的值将被忽略或丢弃,不会在后续的代码中使用。它通常用作临时变量,占位变量或不需要的返回值。
        
        """
        file_path, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save Chart", "", "PNG Files (*.png)")
        
        # 如果选择了文件路径,则保存图表
        if file_path:
            self.canvas.print_figure(file_path, dpi=300)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())


file_path, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save Chart", "", "PNG Files (*.png)")
  • QtWidgets.QFileDialog是PySide6中的文件对话框类,用于选择文件或保存文件。
  • getSaveFileName()QFileDialog类的静态方法,用于显示一个保存文件的对话框,并返回用户选择的文件路径。
  • self是当前窗口的实例,用于指定对话框的父级窗口。
  • "Save Chart"是对话框的标题,显示在对话框的标题栏上。
  • ""是对话框中文件路径的初始目录,默认为空字符串表示当前工作目录。
  • "PNG Files (*.png)"是过滤器字符串,用于指定可选择的文件类型和其对应的文件扩展名。在这个示例中,只能选择保存为PNG格式的文件。

getSaveFileName()方法将返回一个元组,其中第一个元素是用户选择的文件路径,第二个元素是选择的过滤器字符串。在这段代码中,我们使用了解构赋值,将文件路径赋值给变量file_path,而过滤器字符串则被忽略(赋值给了一个匿名变量_)。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个使用 PySide2 和 Matplotlib 实时动态显示图像的程序示例: ```python import sys import random from PySide2.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget from PySide2.QtCore import Qt from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure from matplotlib.animation import FuncAnimation class MainWindow(QMainWindow): def __init__(self): super().__init__() # 创建 Matplotlib 图形 self.figure = Figure() self.canvas = FigureCanvas(self.figure) self.ax = self.figure.add_subplot(111) self.ax.set_xlim([0, 10]) self.ax.set_ylim([0, 100]) # 创建 PySide2 布局和窗口 central_widget = QWidget() self.setCentralWidget(central_widget) layout = QVBoxLayout(central_widget) layout.addWidget(self.canvas) # 开始动画 self.animation = FuncAnimation(self.figure, self.update_plot, interval=1000) def update_plot(self, frame): # 生成随机数据 data = [random.randint(0, 100) for _ in range(10)] # 更新 Matplotlib 图形 self.ax.clear() self.ax.set_xlim([0, 10]) self.ax.set_ylim([0, 100]) self.ax.plot(range(10), data) # 更新 PySide2 窗口 self.canvas.draw() if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 这个程序创建了一个带有 Matplotlib 图形的 PySide2 窗口。在程序,我们使用 FigureCanvas 类来将 Matplotlib 图形嵌入到 PySide2 窗口。然后,我们创建了一个实时动态更新的 Matplotlib 图形,通过 FuncAnimation 类来实现。在 update_plot 方法,我们生成随机数据并更新 Matplotlib 图形,然后使用 FigureCanvas 的 draw 方法来更新 PySide2 窗口。最后,我们调用 QApplication 的 exec_ 方法来进入事件循环,等待用户操作。当用户关闭窗口时,程序退出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扮作大侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值