Я пытаюсь встроить график 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())
Я хотел бы видеть, что график обновляет уравнение для заданного диапазона в режиме реального времени, но я не могу отобразить это.
Пожалуйста, помогите!