亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我以為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 關注
  • 303 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號