【问题标题】:Put a Matplotlib plot as a QGraphicsItem/into a QGraphicsView将 Matplotlib 图作为 QGraphicsItem/ 放入 QGraphicsView
【发布时间】:2020-08-15 05:59:47
【问题描述】:

所以我有一个非常基本的绘图布局,如下所述(为简洁起见,更改了 x 和 y 值):

import matplotlib.pyplot as plt
from matplotlib.figure import Figure
import numpy as np

figure = Figure()
axes = figure.gca()
axes.set_title(‘My Plot’)
x=np.linspace(1,10)
y=np.linspace(1,10)
y1=np.linspace(11,20)
axes.plot(x,y,’-k’,label=‘first one’)
axes.plot(x,y1,’-b’,label=‘second one’)
axes.legend()
axes.grid(True)

我在 QT 设计器中设计了一个 GUI,它有一个 GraphicsView(命名为 graphicsView_Plot),我想把这个图放进去,我想知道我将如何把这个图放到 GraphicsView 中。除非重新开始并使用基于 QT 的绘图功能,否则我真的不知道如何(如果可能)将 matplotlib 图放入此图形视图。我知道如果我也可以将其转换为 QGraphicsItem 将是一件超级简单的事情,因此直接将其放入 GraphicsView 或将其转换为 QGraphicsItem 都对我有用。

【问题讨论】:

  • 将 Matplotlib 的画布(它本身就是一个小部件)嵌入到 Qt 应用程序中可能更容易 - 看看示例代码 here

标签: python matplotlib pyqt


【解决方案1】:

你必须使用一个画布,它是一个呈现 matplotlib 指令的 QWidget,然后使用 addWidget() 方法(或通过 QGraphicsProxyWidget)将其添加到场景中:

import sys

from PyQt5 import QtWidgets

from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

import numpy as np

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    scene = QtWidgets.QGraphicsScene()
    view = QtWidgets.QGraphicsView(scene)

    figure = Figure()
    axes = figure.gca()
    axes.set_title("My Plot")
    x = np.linspace(1, 10)
    y = np.linspace(1, 10)
    y1 = np.linspace(11, 20)
    axes.plot(x, y, "-k", label="first one")
    axes.plot(x, y1, "-b", label="second one")
    axes.legend()
    axes.grid(True)

    canvas = FigureCanvas(figure)
    proxy_widget = scene.addWidget(canvas)
    # or
    # proxy_widget = QtWidgets.QGraphicsProxyWidget()
    # proxy_widget.setWidget(canvas)
    # scene.addItem(proxy_widget)

    view.resize(640, 480)
    view.show()

    sys.exit(app.exec_())

【讨论】:

    猜你喜欢
    • 2011-08-04
    • 2013-06-17
    • 1970-01-01
    • 2010-11-16
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2016-04-25
    相关资源
    最近更新 更多