Python Qt Plot 持续更新

问题描述 投票:0回答:1

考虑下面的示例 PySide6 代码。 我有一个类 SampleWindow ,它连续生成一些值集(x 和 y)。 我还想并行地绘制和可视化它们,为此 ScatterPlotDialog 类已经编写。 但是,我在情节的连续更新/刷新方面遇到了问题。

我不确定这是否是

pyqtgraph
的问题,还是Pythonic的实现问题。 有任何改进或解决问题的建议吗?

from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QPushButton, QDialog
import pyqtgraph as pg
import random


class ScatterPlotDialog(QDialog):
    def __init__(self, x, y):
        super().__init__()
        self.setWindowTitle("Scatter Plot Dialog")
        self.setup_ui()

        # Create initial empty scatter plot
        self.scatter_plot = pg.ScatterPlotItem()
        self.plot_widget.addItem(self.scatter_plot)

        # Set initial scatter plot data
        self.scatter_plot.setData(x=x, y=y)

    def setup_ui(self):
        layout = QVBoxLayout(self)
        self.plot_widget = pg.PlotWidget(self)
        layout.addWidget(self.plot_widget)
        self.setLayout(layout)


class SampleWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Sample Window")
        self.setup_ui()

        self.x = []  # Initialize x and y values as empty lists
        self.y = []

        self.timer = QTimer()
        self.timer.timeout.connect(self.update_data)
        self.timer.start(1000)  # Update data every 1 second

    def setup_ui(self):
        self.button = QPushButton("Open Scatter Plot Dialog", self)
        self.button.clicked.connect(self.open_scatter_plot_dialog)

    def update_data(self):
        # Generate new random data points and update x and y values
        self.x = [random.uniform(0, 10) for _ in range(10)]
        self.y = [random.uniform(0, 10) for _ in range(10)]

    def open_scatter_plot_dialog(self):
        dialog = ScatterPlotDialog(self.x, self.y)
        dialog.exec()


if __name__ == "__main__":
    app = QApplication([])
    window = SampleWindow()
    window.show()
    app.exec()
python pyside pyqtgraph
1个回答
0
投票

您将新数据分配给

self.x
 中的 
self.y
SampleWindow
但这不会更新
dialog.scatter_plot

中的数据

您必须将

dialog
保留为
self.dialog
中的
open_scatter_plot_dialog
并使用

def update_data(self):

    # ...

    self.dialog.scatter_plot.setData(x=self.x, y=self.y)
© www.soinside.com 2019 - 2024. All rights reserved.