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

本文介绍了如何在PyQt5应用程序中嵌入matplotlib图表,并展示如何添加NavigationToolbar工具条。通过创建自定义的MatplotlibFigure类和MplWidget类,实现了在GUI界面中显示和操作matplotlib图形的功能。注意在初始化过程中正确设置参数,避免覆盖父类变量。
摘要由CSDN通过智能技术生成

前言:

本文主要给出了如何将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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JlexZzzz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值