用你写的示列报:self._remove_method(self) ValueError: list.remove(x): x not in list
时间: 2024-03-21 15:43:25 浏览: 103
这个报错通常是因为尝试从列表中删除一个不存在的元素。在示例代码中,可能是因为在删除线时,尝试删除了一个不存在的线。可以加上一个判断,确保要删除的线确实存在于列表中。修改后的代码如下:
```python
import sys
import random
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout
from PyQt5.QtCore import QTimer
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
class ScatterPlot(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('Scatter Plot')
self.fig = Figure()
self.ax = self.fig.add_subplot(111)
self.canvas = FigureCanvas(self.fig)
self.setLayout(QVBoxLayout())
self.layout().addWidget(self.canvas)
self.x = []
self.y = []
self.lines = []
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_plot)
self.timer.start(1000)
def update_plot(self):
self.x.append(len(self.x))
self.y.append(random.randint(0, 100))
if len(self.x) > 30:
self.x.pop(0)
self.y.pop(0)
if self.lines:
self.ax.lines.remove(self.lines[0])
self.lines.pop(0)
self.ax.clear()
self.ax.scatter(self.x, self.y)
line, = self.ax.plot(self.x, self.y, 'r-')
self.lines.append(line)
self.ax.set_xlim(0, len(self.x)+1)
self.ax.set_xticks(range(len(self.x)))
self.ax.set_xticklabels([f'{i:02d}:00:00' for i in range(len(self.x))])
self.canvas.draw()
if __name__ == '__main__':
app = QApplication(sys.argv)
plot = ScatterPlot()
plot.setGeometry(100, 100, 800, 600)
plot.show()
sys.exit(app.exec_())
```
这里使用了 `ax.lines.remove()` 方法来删除线,并且加上了一个判断,确保要删除的线存在于列表中。
阅读全文