考虑下面的示例 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()
您将新数据分配给
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)