Как встроить граф matplotlib в графический интерфейс, созданный с помощью QT Designer? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь встроить график matplotlib в графический интерфейс, созданный с помощью QT Designer (PyQT5), и отображать его в режиме реального времени.

Используя скрипт, сгенерированный с помощью pyuic5, я добавил Figure и canvas из qt5agg. Мне удалось встроить оси в окно QT, но я не могу динамически отображать свой график.

Вот часть GUI кода, который был сгенерирован из QT Designer. Я немного отредактировал его, чтобы встроить виджет для FigureCanvas в matplotlib -

plotter.py

from PyQt5 import QtCore, QtGui, QtWidgets
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

class Ui_MainWindow(object):

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(640, 480)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1)

        self.fig1 = Figure()

        self.canvas1 = FigureCanvas(self.fig1)
        self.axes1 = self.fig1.add_subplot(111)

        self.gridLayout.addWidget(self.canvas1, 0, 0, 1, 1)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 20))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))

Ниже приведен основной скрипт -

plotterFunc.py

import matplotlib as plt
from drawnow import *
import time
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QDialog, QApplication, QMessageBox
from plotter import Ui_MainWindow
from matplotlib.figure import Figure

class LineGraph(QtWidgets.QMainWindow):

    def __init__(self):
        super(LineGraph, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.pushButton.clicked.connect(self.pushClicked)

    def pushClicked(self):

        x = time.time()

        for i in range(1000):
            y = i * x

            # print x and y to confirm if the script is running properly
            print(x,y) 

            self.ax1 = self.ui.axes1.plot(x, y)
            self.ui.canvas1.draw()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    application = LineGraph()
    application.show()
    sys.exit(app.exec())

Я хотел бы видеть, что график обновляет уравнение для заданного диапазона в режиме реального времени, но я не могу отобразить это.

Пожалуйста, помогите!

...