pyside6 中qml显示matplotlib

在python中定义MatplotlibImageProvider类,首先,您需要将 matplotlib 图表转换为 QImage。幸运的是,这样做非常容易。matplotlib 的规范后端(渲染器)是 *Agg’,它允许您将 Figure 渲染到内存中。只需为您的 Figure制作一个合适的 Canvas 对象,然后调用 .draw()。QImage 构造函数将直接将生成的数据作为输入。

from PySide6.QtGui import QImage
from PySide6.QtQml import QQmlImageProviderBase
from PySide6.QtQuick import QQuickImageProvider
from matplotlib.figure import Figure
from matplotlib.backends.backend_agg import FigureCanvasAgg

class MatplotlibImageProvider(QQuickImageProvider):
    figures = dict()

    def __init__(self):
        QQuickImageProvider.__init__(self, QQmlImageProviderBase.Image)

    def addFigure(self, name, **kwargs):
        figure = Figure(**kwargs)
        self.figures[name] = figure
        return figure

    def getFigure(self, name):
        return self.figures.get(name, None)

    def requestImage(self, p_str,w,h):
        figure = self.getFigure(p_str)
        if figure is None:
            return QQuickImageProvider.requestImage(self, p_str,w,h)

        canvas = FigureCanvasAgg(figure)
        canvas.draw()

        w, h = canvas.get_width_height()
        img = QImage(canvas.buffer_rgba(), w, h,QImage.Format_RGBA8888).copy()

        return img

每当我需要用python代码绘制绘图时,我只需使用此addFigure创建Figure来为其命名,并让Qt知道它。一旦你得到了Figure,matplotlib绘图的其余部分就会像往常一样发生。制作轴和绘图。请注意,URL以“image://”为前缀,以告诉QML我们需要从QQuickImageProvider获取图像,并包含要使用的特定提供程序的名称(“perflog”)。为了使这些东西正常工作,我们需要在QML初始化期间通过调用addImageProvider来注册我们的提供程序。例如

imageprovider = MatplotlibImageProvider()
engine.addImageProvider('perflog',imageprovider)
figure = imageProvider.addFigure("eventStatisticsPlot", figsize=(10,10))
ax = figure.add_subplot(111)
ax.plot(x,y)



然后在QML代码中,我可以简单地按名称引用matplotlib图像(“eventStatisticsPlot”)

Image{
    width: 510
    height: 504
    source:"image://perflog/eventStatisticsPlot"
    fillMode: Image.PreserveAspectFit
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值