pyqt5画动态曲线
时间: 2023-08-26 16:02:28 浏览: 131
PyQT5PlotDynamicCurve.rar_pyqt matplot_pyqt5 曲线_pyqt5绘制曲线_ridin
使用PyQt5可以很方便地画动态曲线。下面是一个简单的示例代码:
```python
import sys
import random
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout
from PyQt5.QtGui import QPainter, QColor, QPen
from PyQt5.QtCore import Qt, QTimer
class CurveWidget(QWidget):
def __init__(self):
super().__init__()
self.data = [] # 保存曲线数据的列表
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_data)
self.timer.start(100) # 每隔100ms更新一次数据
def paintEvent(self, event):
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing) # 抗锯齿
painter.fillRect(self.rect(), Qt.white) # 填充白色背景
pen = QPen(QColor(0, 0, 255)) # 设置画笔颜色为蓝色
pen.setWidth(2) # 设置画笔宽度为2
painter.setPen(pen)
# 画曲线
for i in range(len(self.data)-1):
painter.drawLine(i, self.data[i], i+1, self.data[i+1])
def update_data(self):
# 随机生成曲线数据
self.data.append(random.randint(0, self.height()))
if len(self.data) > self.width():
self.data = self.data[-self.width():] # 保持数据长度和窗口宽度一致
self.update()
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("动态曲线")
self.resize(400, 300)
self.central_widget = QWidget(self)
self.setCentralWidget(self.central_widget)
layout = QVBoxLayout()
self.plot_widget = CurveWidget()
layout.addWidget(self.plot_widget)
self.central_widget.setLayout(layout)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
以上代码中,我们使用了一个`CurveWidget`类来绘制动态曲线。在`paintEvent`方法中,我们使用`QPainter`类来绘制曲线,先设置了画笔的颜色和宽度,然后通过`drawLine`方法逐个连接曲线上的点。
在`update_data`方法中,我们每隔100毫秒随机生成一个新的曲线数据,并将其添加到数据列表中。如果数据列表的长度超过了窗口的宽度,则从列表的开头开始删除数据,以保持数据长度和窗口宽度一致。然后通过调用`update`方法来触发窗口的`paintEvent`方法更新绘图。
最后,在`MainWindow`类中创建了一个基于`CurveWidget`的主窗口,并启动了应用程序的事件循环。运行代码后,你将看到一个具有随机动态变化的曲线的窗口。
阅读全文