Python 我认为matplotlib中的所有内容都是QWidget。显然,这一数字并非如此。我的界面接受QWidgets。怎么办?

Python 我认为matplotlib中的所有内容都是QWidget。显然,这一数字并非如此。我的界面接受QWidgets。怎么办?,python,matplotlib,Python,Matplotlib,我正在用python学习matplotlib。任务是在UI中嵌入绘图。情节将在收到某个事件后重新绘制 UI应用程序采用QtDesigner生成的类,该类基本上是4000行 self.BRIGHTNESS = QtGui.QSlider(ZenMainForm) self.BRIGHTNESS.setGeometry(QtCore.QRect(463, 73, 32, 131)) 等等,生成一些其他对象,并在绘制之前将其显示到生成的类中 我已经确定了这个过程,并且能够添加滑块、单选按钮和其他标准

我正在用python学习matplotlib。任务是在UI中嵌入绘图。情节将在收到某个事件后重新绘制

UI应用程序采用QtDesigner生成的类,该类基本上是4000行

self.BRIGHTNESS = QtGui.QSlider(ZenMainForm)
self.BRIGHTNESS.setGeometry(QtCore.QRect(463, 73, 32, 131))
等等,生成一些其他对象,并在绘制之前将其显示到生成的类中

我已经确定了这个过程,并且能够添加滑块、单选按钮和其他标准的QWidget派生对象


但是,现在我需要嵌入上述图形。有很多,但是他们在画布上创建一张图片,然后向其中添加轴。不幸的是,我不理解这个过程,最重要的是,我不理解如何创建一个包含可变图的QWidget。从那时起,将它集成到应用程序中就只有一行了。

我删除了教程中所有不相关的内容。然后我开始将我的代码集成到教程代码中,直到它崩溃。这突出了我的错误。谢谢大家的宝贵意见

下面是本教程的修改后的最低版本。只需将DynamicPlCanvas用作普通的QWidget

# Copyright (C) 2005 Florent Rougon
#               2006 Darren Dale
#
# This file is an example program for matplotlib. It may be used and
# modified with no restriction; raw copies as well as modified versions
# may be distributed without limitation.

from __future__ import unicode_literals
import sys, os, random
from PyQt4 import QtGui, QtCore
from numpy import arange, sin, pi
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure


class MplCanvas(FigureCanvas):
    """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""
    def __init__(self, parent=None, width=5, height=4, dpi=100):
        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)

        # We want the axes cleared every time plot() is called
        self.axes.hold(False)

        self.compute_initial_figure()
        FigureCanvas.__init__(self, fig)
        self.setParent(parent)

        FigureCanvas.setSizePolicy(self,
                                   QtGui.QSizePolicy.Expanding,
                                   QtGui.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)


class DynamicMplCanvas(MplCanvas):
    """A canvas that updates itself every second with a new plot."""
    def __init__(self, *args, **kwargs):
        MplCanvas.__init__(self, *args, **kwargs)
        timer = QtCore.QTimer(self)
        QtCore.QObject.connect(timer,
                               QtCore.SIGNAL("timeout()"),
                               self.update_figure)
        timer.start(1000)

    def compute_initial_figure(self):
        self.axes.plot([0, 1, 2, 3], [1, 2, 0, 4], 'r')

    def update_figure(self):
        # Build a list of 4 random integers between 0 and 10 (both inclusive)
        l = [ random.randint(0, 10) for i in range(4) ]
        self.axes.plot([0, 1, 2, 3], l, 'r')
        self.draw()

注意:在matplotlib中,所有美工人员(图
是美工人员)都是后端独立的。实际上绘制的是
Canvas
,是
Canvas
这是
QWidget
。我没有任何可执行代码供您使用,但基本思想是:-创建一个FigureCanvas,它是一个QWidget(例如,matplotlib.backends.backend\u qt4agg\import FigureCanvas qtagg as FigureCanvas
-此画布容纳您的图形,因此您应该执行以下操作:
self.fig=figure(…)self.ax=self.fig.add\u子图(…)
-每个图形通常都有一个方法
update\u plot()
,它被调用以更新绘图。这是您想要实现绘图例程的地方。我希望我正确地理解了它,并且它对您有所帮助。教程中的canvas类可以让您完全按照您的要求进行链接。