繁体   English   中英

QT GUI图形更新中的Matplotlibwidget

[英]Matplotlibwidget in QT gui graph update

我是Python的新手,我想开发一个GUI程序。 我已经安装了pythonxy,并且已经开发了QT4 GUI,并已使用pyuic4将其转换为py。

在我的程序中,当我单击按钮时,我想用新变量更新mplwidget。 我只想更新小部件,而无需重新启动ui。 我如何修改以下解决方案以仅更新小部件。

非常感谢您的帮助和指示

from PyQt4 import QtCore, QtGui
from matplotlibwidget import MatplotlibWidget
import numpy as np

global y
global x
x=[1,2,3]
y=[1, 2, 1]

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s



class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.mplwidget = MatplotlibWidget(self.centralwidget)
        self.mplwidget.setGeometry(QtCore.QRect(170, 150, 400, 300))
        self.mplwidget.setObjectName("mplwidget")
        self.mplwidget.setFocus()
        self.mplwidget.axes.plot(x,y)
        MainWindow.setCentralWidget(self.centralwidget)

        self.statusbar = QtGui.QStatusBar(MainWindow) 
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.pushButton = QtGui.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(170, 60, 75, 23))
        self.pushButton.setObjectName("pushButton")        

        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.plot)

        QtCore.QMetaObject.connectSlotsByName(MainWindow)


    def plot(self):   
        global y
        global x
        x = [2,3,4]
        y = [2,2,1]
        self.replot()

    def replot(self):
        Ui_MainWindow()
        ui.setupUi(MainWindow)        

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

我不熟悉matplotlibwidget ,因此可能有一种更简单的方法来执行此操作,但是您可以获取Axes对象并对其进行所需的操作:

def replot_(self, x, y):
    # plot the data and keep a reference to the `Line2D` object
    ln, = self.matplotlibwidget.axes.plot(x, y)
    # force the canvas to re-draw, 
    # matplotlibwidget may provide more direct access to the canvas
    self.matplotlibwidget.axes.figure.canvas.draw()
    return ln

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM