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
,而过滤器字符串则被忽略(赋值给了一个匿名变量_
)。