为了账号安全,请及时绑定邮箱和手机立即绑定

我以为matplotlib中的所有内容都是QWidget。显然图不是。该怎么办?

我以为matplotlib中的所有内容都是QWidget。显然图不是。该怎么办?

收到一只叮咚 2021-03-29 19:15:37
我正在用python学习matplotlib。任务是在用户界面中嵌入图。该情节将在收到某些事件后重画。UI应用程序采用QtDesigner生成的类,基本上是4000行self.BRIGHTNESS = QtGui.QSlider(ZenMainForm)self.BRIGHTNESS.setGeometry(QtCore.QRect(463, 73, 32, 131))等,生成其他一些对象,并在绘制之前将它们附加到生成的类。我已经确定了此过程,并且能够添加滑块,单选按钮和其他标准的QWidget派生对象。但是,现在我需要嵌入上述图形。有很多教程,但是他们在画布上创建了一个图片,然后向其中添加了轴。不幸的是,我不了解此过程,最重要的是,我不了解如何创建包含可变图的QWidget。从那里开始,仅需一行即可将其集成到应用程序中。
查看完整描述

2 回答

?
森栏

TA贡献1810条经验 获得超5个赞

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


以下是本教程的修改后的最低版本。只需将DynamicMplCanvas用作普通的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()


查看完整回答
反对 回复 2021-04-02
  • 2 回答
  • 0 关注
  • 277 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信