【PyQt5学习笔记】如何将matplotlib嵌入pyqt界面中,并显示NavigationToolbar

前言:

本文主要给出了如何将matplotlib绘制的图形嵌入pyqt界面UI中,并显示NavigationToolbar工具条。

最近在开发一个小工具,主要是用作离散元计算结果可视化。GUI是pyqt5,嵌入matplotlib。目前是业余编程,写博客记录一下遇到的问题,大家仅供参考。

 实例:

import matplotlib
from PyQt5.QtWidgets import QWidget
matplotlib.use("Qt5Agg") # 声明使用pyqt5
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg # pyqt5的画布
from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
from PyQt5 import QtWidgets

class MatplotlibFigure(FigureCanvasQTAgg):
    """
    创建一个画布类,并把画布放到FigureCanvasQTAgg
    """
    def __init__(self,parent=None,width=5,height=4,dpi=200):
        """

        :param parent:
        :param width:
        :param height:
        :param dpi:
        """
        self.figs = Figure(figsize=(width,height),dpi=dpi)
        super(MatplotlibFigure, self).__init__(self.figs)#在父类中激活self.fig
        self.setParent(parent)
        self.axes = self.figs.add_subplot(111)
        self.axes.patch.set_alpha(0.5)  # 设置ax区域背景颜色透明度
        FigureCanvasQTAgg.setSizePolicy(self,QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        # 用于告知包含该widget的layout:该widget的size hint已发生变化,layout会自动进行调整。
        FigureCanvasQTAgg.updateGeometry(self)


class MplWidget(QWidget):
    def __init__(self, parent=None):
        """

        :param parent:
        """
        QWidget.__init__(self, parent)
        self.qCanvas = MatplotlibFigure(parent)
        self.mpl_toolbar = NavigationToolbar(self.qCanvas, self)  # 创建工具条
        # 创建布局,把画布类组件对象和工具条对象添加到QWidget控件中
        self.vbl = QtWidgets.QVBoxLayout()
        self.vbl.addWidget(self.qCanvas)
        self.vbl.addWidget(self.mpl_toolbar)
        self.setLayout(self.vbl)

注意:

不能出现下面这种写法,会造成了对父类变量的覆盖。

self.width = width
self.heigh = heigh
self.dpi = dpi

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要在PyQt5嵌入Matplotlib图形,可以使用`FigureCanvas`类和`NavigationToolbar`类。以下是一个简单的示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar from matplotlib.figure import Figure class MainWindow(QMainWindow): def __init__(self): super().__init__() # 创建一个Matplotlib图形 self.figure = Figure() self.canvas = FigureCanvas(self.figure) # 创建一个导航工具栏 self.toolbar = NavigationToolbar(self.canvas, self) # 创建一个垂直布局,并将图形和工具栏添加进去 layout = QVBoxLayout() layout.addWidget(self.canvas) layout.addWidget(self.toolbar) # 创建一个QWidget作为主窗口的心部件 widget = QWidget() widget.setLayout(layout) self.setCentralWidget(widget) # 绘制Matplotlib图形 self.plot() def plot(self): # 在Matplotlib图形上绘制一些内容 ax = self.figure.add_subplot(111) ax.plot([1, 2, 3, 4], [1, 4, 9, 16]) ax.set_title('Matplotlib Plot') ax.set_xlabel('X-axis') ax.set_ylabel('Y-axis') self.canvas.draw() if __name__ == '__main__': app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_()) ``` 在这个示例,我们创建了一个`MainWindow`类作为主窗口,并在其嵌入了一个Matplotlib图形。我们使用`FigureCanvas`类将Matplotlib图形添加到PyQt5窗口,并使用`NavigationToolbar`类添加一个导航工具栏。然后,我们在`plot`方法绘制了一个简单的Matplotlib图形。 要运行这个示例,确保你已经安装了PyQt5Matplotlib库,并将以上代码保存在一个Python脚本文件,然后运行该脚本即可看到嵌入Matplotlib图形的PyQt5窗口。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JlexZzzz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值