pyqt
用pyqt做的小项目,其中有个需求是实时更新曲线图,在这里记录下调试的代码。pyqt和qt基本相同,可以参照C++版本qt的写法。
pyqtchart
pyqtchart的资料可真少呀。搜了好久,最后还是结合C++版的文档和大佬们的博客做出来这个效果。
- 中途看到了有大佬用pyecharts画图,用pyqt中的webview 组件来显示,这也不失为一种好方法。
代码
直接上代码
class Mainwindow(QMainWindow, Ui_MainWindow):
def __init__(self, *args, **kwargs):
super(Mainwindow, self).__init__(*args, **kwargs)
self.setupUi(self) # 初始化ui
self.graphicsView.setRenderHint(QPainter.Antialiasing)
self.limitminute=240 #设置显示多少分钟内的活动
self.chart_init()
self.timer_init()
self.last = 0
def timer_init(self):
# 使用QTimer,2秒触发一次,更新数据
self.timer = QTimer(self)
self.timer.timeout.connect(self.drawLine)
self.timer.start(2000)
def chart_init(self):
self.chart = QChart()
self.series = QSplineSeries()
self.series1 = QSplineSeries()
self.series.append(QPointF(2.5,5))
self.series1.append(QPointF(2.5, 5))
self.chart.addSeries(self.series)
self.chart.addSeries(self.series1)
self.chart.axisY = QValueAxis()
self.chart.axisY.setRange(0,100)
self.chart.axisY.setTickCount(5)
self.chart.axisX = QValueAxis()
self.chart.axisX.setRange(0, 100)
self.chart.axisX.setTickCount(5)
self.chart.addAxis(self.chart.axisY,Qt.AlignLeft)
self.chart.addAxis(self.chart.axisX, Qt.AlignBottom)
self.series.attachAxis(self.chart.axisY)
self.series.attachAxis(self.chart.axisX)
self.series1.attachAxis(self.chart.axisY)
self.series1.attachAxis(self.chart.axisX)
self.index = 3
self.graphicsView.setChart(self.chart)
def drawLine(self):
print(66)
self.now = random.randint(30,50)
self.series.append(QPointF(self.index+1,self.now))
self.series1.append(QPointF(self.index + 1, self.last))
self.index+= 1
self.last = self.now
if self.index>100:
self.chart.scroll(3,0)
if __name__ == '__main__': # 程序的入口
app = QApplication(sys.argv)
win = Mainwindow()
win.show()
sys.exit(app.exec_())