Как обновить sh виджет matplotlib? - PullRequest
0 голосов
/ 09 марта 2020

Я делаю приложение pyqt5, и есть графики, которые должны обновляться каждые пять секунд. Для простоты я создал небольшое окно с графиком и маленькой кнопкой, которая обновляет график. В начале, чтобы обновить график, я использовал метод setParent (None), а затем создал новый объект графика. Я думал, что это не очень хорошая идея (так как через некоторое время создается слишком много графиков и происходит сбой приложения). Поэтому я решил как-то повторно использовать первый графовый объект и просто вызвать функцию, которая обновляет его. Я написал следующий код, который обновляет sh график при нажатии кнопки, но только после перетаскивания границы окна:

from PyQt5.QtWidgets import QDialog
from PyQt5.QtWidgets import QApplication, QWidget,QVBoxLayout,QPushButton,QTabWidget
import sys
import random
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

x1 =[]
y1 = []
colors = ["purple", "lime", "magenta", "red", "blue", "orange"]

class Canvas(FigureCanvas):
    def __init__(self, parent=None, width=5, height=5, dpi=50):
        self.fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = self.fig.add_subplot(111)
        FigureCanvas.__init__(self, self.fig)
        self.setParent(parent)
        self.plot()

    def clear(self):
        self.fig.clf()

    def plot(self):
        print("H")
        x1 = []
        y1 = []
        for i in range(100):
            x1.append(i*5)
            y1.append(random.randrange(0, 2000))
        ax = self.figure.add_subplot(111)
        ax.plot(x1, y1, color= colors[random.randint(0, len(colors)-1)])


class MainWindow(QDialog):
    def __init__(self):
        super().__init__()
        self.setGeometry(7, 55,600, 600)
        graphsArea = QVBoxLayout(self)
        bbb = QPushButton("UPDATE GRAPHS")
        bbb.clicked.connect(lambda : self.testf())

        graphsArea.addWidget(bbb)
        self.graph1 = Canvas()

        self.tabs = QTabWidget()
        self.graph = QWidget()
        self.graph.layout = QVBoxLayout( self.graph)
        self.graph.layout.addWidget(self.graph1)
        self.tabs.addTab(self.graph, "Graph1")
        graphsArea.addWidget(self.tabs)
        self.show()

    def testf(self):
        print("hhh")
        self.graph1.clear()
        self.graph1.plot()

if __name__ == '__main__':
    App = QApplication(sys.argv)
    App.setStyle('Fusion')
    window = MainWindow()
    sys.exit(App.exec())

Итак, как обновить график сразу после кнопки нажата?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...