Matplotlib绘图嵌入PySide2图形界面
- 前言
- 正文
- 1、FigureCanvasQTAgg类介绍
- 2、基于FigureCanvasQTAgg类实现Matplotlib绘图嵌入PySide2图形界面
- 3、示例代码及实现效果
前言
在本文中主要介绍 如何基于 FigureCanvasQTAgg 类实现 Matplotlib 绘图嵌入 PySide2 图形界面。
正文
1、FigureCanvasQTAgg类介绍
Matplotlib 提供了一个 FigureCanvasQTAgg 类,把 Matplotlib 绘图嵌入 QT(PyQT5、PySide2) 中 。必须将 ‘Figure对象’ 作为参数传递给 Qt 基类。其主要实现的功能是 将图像从 Agg 画布复制到qt.drawable。在 QT 中,当一个小部件显示在屏幕上时,所有的绘图都应该在这里完成。
2、基于FigureCanvasQTAgg类实现Matplotlib绘图嵌入PySide2图形界面
操作步骤如下:
-
基于 PySide2 创建主窗体;
central_widget = QWidget(self) # 创建一个主窗口
-
创建 Figure 对象和 Axes 对象;
fig = Figure() # 创建Figure对象 ax = fig.add_subplot(1,1,1) # 创建Axes对象 ax.plot([1, 2, 3, 4], [10, 20, 30, 40]) # 绘图
-
创建 FigureCanvasQTAgg 对象,绑定 Figure 对象到 FigureCanvasQTAgg 对象上;
self.canvas = FigureCanvas(fig) # 创建FigureCanvasQTAgg对象
-
基于 PySide2 创建布局;
layout = QVBoxLayout(central_widget) # 创建一个垂直布局
-
将 FigureCanvasQTAgg 对象添加到布局中。
layout.addWidget(self.canvas) # 将FigureCanvasQTAgg对象添加到布局中
3、示例代码及实现效果
import sys
from PySide2.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
# 创建一个主窗口,并设置居中显示
central_widget = QWidget(self)
self.setCentralWidget(central_widget)
# 创建一个垂直布局
layout = QVBoxLayout(central_widget)
# 创建Figure对象和FigureCanvas对象,绑定Figure对象到canvas上,并添加到布局中
fig = Figure()
self.canvas = FigureCanvas(fig)
layout.addWidget(self.canvas)
# 绘制matplotlib图形,设置标题
ax = fig.add_subplot(1,1,1)
ax.plot([1, 2, 3, 4], [10, 20, 30, 40])
ax.set_title('matplotlib plot')
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())