日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

chart控件做实时曲线显示_用PyQt5.QtChart实现动态曲线图

發(fā)布時(shí)間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 chart控件做实时曲线显示_用PyQt5.QtChart实现动态曲线图 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

之前一直用爬蟲(chóng)捉取路由實(shí)時(shí)上下載的記錄用數(shù)據(jù)庫(kù)保存,有時(shí)可用matplotlib來(lái)查看時(shí)間與上下傳的曲線圖,但是靜態(tài)的,查詢的時(shí)間段需自行認(rèn)定,雖然qt的日歷類可以比較方便取日期按日期查,但總覺(jué)要點(diǎn)有點(diǎn)麻煩,又不想看24小時(shí)的數(shù)據(jù),截取最近幾小時(shí)觀看數(shù)據(jù)并實(shí)時(shí)展示應(yīng)該是很好的方式,經(jīng)百度發(fā)現(xiàn)pyqt有個(gè)很方便的庫(kù)來(lái)展示動(dòng)態(tài)數(shù)據(jù),這個(gè)庫(kù)是pyqtchart,安裝PyQt時(shí)并沒(méi)有這個(gè)庫(kù)的,需另行安裝,pip install pyqtchart安裝就可以了,下面就結(jié)合代碼和實(shí)際情況記錄一下。

import sqlite3,sys,time from datetime import datetime from PyQt5.QtChart import QDateTimeAxis,QValueAxis,QSplineSeries,QChart,QChartView from PyQt5.QtWidgets import QApplication from PyQt5.QtGui import QPainter from PyQt5.QtCore import QDateTime,Qt,QTimerclass ChartView(QChartView,QChart): #原代碼如此,繼承了兩個(gè)類,其實(shí)去掉QChart也沒(méi)影響def __init__(self, *args, **kwargs):super(ChartView, self).__init__(*args, **kwargs)self.connect = sqlite3.connect("netdata.db") #數(shù)據(jù)庫(kù),表名為t1,包括時(shí)間(年月日時(shí)分秒的方式,用sqlite的自動(dòng)時(shí)間截生成的,為方便自己看,轉(zhuǎn)成年月日,結(jié)果是個(gè)坑),下載速度,上傳速度self.resize(1500, 500)self.setRenderHint(QPainter.Antialiasing) # 抗鋸齒,注釋此行曲線很難看self.limitminute=240 #設(shè)置顯示多少分鐘內(nèi)的活動(dòng)self.maxspeed = 300 #預(yù)設(shè)y軸最大值self.chart_init()self.timer_init()def timer_init(self):#使用QTimer,2秒觸發(fā)一次,更新數(shù)據(jù)self.timer = QTimer(self)self.timer.timeout.connect(self.drawLine)self.timer.start(2000)def chart_init(self):self.chart = QChart()self.series = QSplineSeries() #這個(gè)是平滑曲線類,而QSplineSeries()是折線類,根所自己需求選用,下載數(shù)據(jù)曲線self.series_upload = QSplineSeries() #上傳數(shù)據(jù)曲線#設(shè)置曲線名稱self.series.setName("下載速度")self.series_upload.setName('上傳速度')#把曲線添加到QChart的實(shí)例中self.chart.addSeries(self.series)self.chart.addSeries(self.series_upload)#聲明并初始化X軸,Y軸self.dtaxisX = QDateTimeAxis()self.vlaxisY = QValueAxis()#設(shè)置坐標(biāo)軸顯示范圍self.dtaxisX.setMin(QDateTime.currentDateTime().addSecs(-self.limitminute*60))self.dtaxisX.setMax(QDateTime.currentDateTime().addSecs(0))self.vlaxisY.setMin(0) self.vlaxisY.setMax(self.maxspeed) #設(shè)置y軸最大值#設(shè)置X軸時(shí)間樣式self.dtaxisX.setFormat("hh:mm") #關(guān)注就是幾小時(shí)內(nèi)的數(shù)據(jù),就留時(shí)分好了#設(shè)置坐標(biāo)軸上的格點(diǎn)self.dtaxisX.setTickCount(15) #平均分的刻度分隔self.vlaxisY.setTickCount(10)#設(shè)置坐標(biāo)軸名稱self.dtaxisX.setTitleText("時(shí)間")self.vlaxisY.setTitleText("速度(M)")#設(shè)置網(wǎng)格顯示,并設(shè)為灰色 self.vlaxisY.setGridLineVisible(True)self.vlaxisY.setGridLineColor(Qt.gray)self.dtaxisX.setGridLineVisible(True)self.dtaxisX.setGridLineColor(Qt.gray)#把坐標(biāo)軸添加到chart中self.chart.addAxis(self.dtaxisX,Qt.AlignBottom)self.chart.addAxis(self.vlaxisY,Qt.AlignLeft)#把曲線關(guān)聯(lián)到坐標(biāo)軸self.series.attachAxis(self.dtaxisX)self.series.attachAxis(self.vlaxisY)self.series_upload.attachAxis(self.dtaxisX)self.series_upload.attachAxis(self.vlaxisY)self.setChart(self.chart)def drawLine(self):#獲取當(dāng)前時(shí)間bjtime = QDateTime.currentDateTime()#更新X軸坐標(biāo)self.dtaxisX.setMin(bjtime.addSecs(-self.limitminute*60))self.dtaxisX.setMax(bjtime.addSecs(0))#設(shè)Y軸最大值,查詢數(shù)據(jù)庫(kù)最近4小時(shí)內(nèi)的下載最大值,并乘1.2作為y軸最大值for xx in self.connect.execute("select max(downdata) from t1 where time > datetime('now','-4 hour','localtime') order by time"):if xx:self.vlaxisY.setMax(int(xx[0] * 1.2))else:self.vlaxisY.setMax(self.maxspeed)if self.series.at(0): #self.serie存在索引0時(shí),也就是起碼有一個(gè)數(shù)據(jù)對(duì)過(guò)舊數(shù)據(jù)進(jìn)行清除,self.series.removePoints兩參數(shù)一個(gè)是索引,一個(gè)是從索引起始刪除多少個(gè)數(shù)值,兩條數(shù)據(jù)均如此處理if self.series.at(0).x()<bjtime.addSecs(-self.limitminute*60).toMSecsSinceEpoch(): #self.series.at(0).x()其實(shí)就是圖像x坐標(biāo)值,與原始數(shù)據(jù)可能并不完全相等,小數(shù)點(diǎn)后的值是約去了的,bjtime的toMSecsSinceEpoch()其實(shí)與time.time()相約,不過(guò)前者是整數(shù),是后者的1000倍,所以后面需要轉(zhuǎn)換self.series.removePoints(0, 1)if self.series_upload.at(0):if self.series_upload.at(0).x()<bjtime.addSecs(-self.limitminute*60).toMSecsSinceEpoch():self.series_upload.removePoints(0, 1)for xx in self.connect.execute("select * from t1 order by time desc limit 1"):#x1 = self.connect.execute("select strftime('%s',?)", (xx[0],)).fetchone()[0] #用此法轉(zhuǎn)出來(lái)的時(shí)間截與time.time()整好差8個(gè)時(shí)區(qū),用sqlite不知如何處理了x1=time.mktime(datetime.strptime(xx[0], '%Y-%m-%d %H:%M:%S').timetuple()) #用py內(nèi)置庫(kù)的辦法有日期轉(zhuǎn)為時(shí)間截x_time=int(x1)*1000 #再乘1000,以符號(hào)格式要求y0_value=xx[1] #取得下載數(shù)據(jù)y1_value=xx[2] #取得上傳數(shù)據(jù)#添加數(shù)據(jù)到曲線末端if self.series.at(0): #因數(shù)據(jù)庫(kù)并非每秒更新,為免相同數(shù)據(jù)重復(fù)錄入,先判斷self.series起碼有一個(gè)數(shù)據(jù)if x_time!=self.series.at(self.series.count()-1).x(): #假如最新的時(shí)間軸與數(shù)據(jù)庫(kù)取得的不一致就錄入,相同就跳過(guò)self.series.append(x_time, y0_value)else: #當(dāng)self.series為空時(shí)起碼錄入第一個(gè)數(shù)據(jù),下面另外一軸同樣處理self.series.append(x_time,y0_value)if self.series_upload.at(0):if x_time!=self.series_upload.at(self.series_upload.count()-1).x():self.series_upload.append(x_time, y1_value)else:self.series_upload.append(x_time,y1_value)#print(self.series.count(),self.series_upload.count())if __name__ == "__main__":app = QApplication(sys.argv)view = ChartView()view.show()sys.exit(app.exec_())

下面上張效果圖

不過(guò)這個(gè)標(biāo)題到底是怎么改的?沒(méi)找到什么方法

總結(jié)

以上是生活随笔為你收集整理的chart控件做实时曲线显示_用PyQt5.QtChart实现动态曲线图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产乱子一区二区 | 天天想你在线观看完整版电影免费 | 色综合一区 | 男女无遮挡猛进猛出 | 国产九九精品视频 | 国产一区视频在线 | 好吊视频一区 | jizz一区| 亚洲视频免费在线观看 | 成人天堂av | 九九热只有精品 | 日韩一级黄色片 | 97人人爽人人 | 国产日韩精品一区 | 国产精品69久久久 | 国产精品sm调教免费专区 | 秋霞福利网 | 国产人妻精品一区二区三区不卡 | 亚洲乱轮| 久久免费在线视频 | 日韩一级高清 | 无套内谢大学处破女www小说 | 久久久久久免费 | 亚洲精品视频在线看 | 久草精品国产 | 午夜不卡av | 日本三级黄色录像 | 欧美aa | 国产欧美在线精品日韩 | 成人在线免费视频观看 | 亚洲色图 美腿丝袜 | 99久久久国产精品 | 免费人妻一区二区三区 | 亚洲狼人干 | 亚洲欧美在线观看 | 91丨porny丨海角社区 | 成人免费网视频 | 亚洲区小说区图片区qvod | 萌白酱在线观看 | 91国偷自产一区二区三区女王 | 在线看黄免费 | 欧美a√在线 | 欧美婷婷六月丁香综合色 | 久久久社区 | 天堂福利视频 | 国产九九九精品 | 中文字幕在线免费播放 | 国产欧美精品 | 青青草综合 | 麻豆一区二区三区精品视频 | 国产精品77777| av高清在线观看 | 国产伦精品一区二区三区在线观看 | 国产私拍 | 波多野结衣视频播放 | 国产 欧美 自拍 | 国产亚洲二区 | wwwxxx日本 | 深爱五月激情五月 | 欧美乱大交xxxxx | 亚洲欧美日韩网站 | 日韩欧美在线免费 | 隔壁邻居是巨爆乳寡妇 | 国产成人福利 | 男人操女人逼逼视频 | 琪琪色影音先锋 | 日韩视频国产 | 久久久青草| 日日草夜夜草 | 久久精品一区二区免费播放 | 天堂网va | 最新中文字幕第一页 | 伊人青草 | 在线一区不卡 | 苍井空浴缸大战猛男120分钟 | 精品国产一区二区三区久久久蜜月 | 国产精品一区二区三区高潮 | 欧美日韩成人在线 | 人与动物毛片 | 99久久九九 | 精品免费av| 福利电影一区 | 亚洲精品视频在线免费 | 中文字幕免费看 | 亚洲尤物视频 | 天天人人 | 精品伦精品一区二区三区视频密桃 | 欧美99久久精品乱码影视 | а√中文在线资源库 | 欧美淫视频 | 中国浓毛少妇毛茸茸 | 日韩国产综合 | 国产高潮呻吟久久 | 色窝窝无码一区二区三区 | 日韩中文字幕一区 | 国产精品999久久久 在线青草 | 亚洲激情国产 | 97色伦97色伦国产欧美空 | 激情黄色小视频 |