import sys
import random
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtChart import QDateTimeAxis,QValueAxis,QSplineSeries,QChart,QChartView
class TsetUI(QMainWindow):
def __init__(self):
super().__init__()
self.initTableView()
self.timer_init()
self.initchart()
self.initUI()
def closeEvent(self, event):
sys.stdout = sys.__stdout__
super().closeEvent(event)
def initTableView(self):
self.model = QStandardItemModel(4, 4)
#设置水平方向四个头标签文本内容
self.model.setHorizontalHeaderLabels(['打开折线','名称','数据1','数据2'])
self.model.itemChanged.connect(self.on_itemChanged)
self.tableView = QTableView(self)
self.tableView.setModel(self.model)
#构造数据
for row in range(20):
#第一个列多选框
item = QStandardItem('')
item.setCheckable(True)
self.model.setItem(row, 0, item)
item = QStandardItem('name%s' % (row))
self.model.setItem(row, 1, item)
item = QStandardItem('%s' % (row))
self.model.setItem(row, 2, item)
item = QStandardItem('%s' % (row))
self.model.setItem(row, 3, item)
self.tableView.setColumnWidth(0, 60)
self.tableView.setFixedWidth(450)
self.tableView.setFixedHeight(400)
self.tableView.move(10, 10)
@pyqtSlot("QStandardItem*")
def on_itemChanged(self, item):
row = self.tableView.currentIndex().row()
column = self.tableView.currentIndex().column()
if item.checkState() == Qt.Checked:
print("checked")
print('({}, {})'.format(row, column))
else:
print("unchecked")
print('({}, {})'.format(row, column))
def initchart(self):
self.chart = QChart()
self.series = QSplineSeries()
#设置曲线名称
self.series.setName("实时数据")
#把曲线添加到QChart的实例中
self.chart.addSeries(self.series)
#声明并初始化X轴,Y轴
self.dtaxisX = QDateTimeAxis()
self.vlaxisY = QValueAxis()
#设置坐标轴显示范围
self.dtaxisX.setMin(QDateTime.currentDateTime().addSecs(-300*1))
self.dtaxisX.setMax(QDateTime.currentDateTime().addSecs(0))
self.vlaxisY.setMin(0)
self.vlaxisY.setMax(1500)
#设置X轴时间样式
self.dtaxisX.setFormat("hh:mm:ss")
#设置坐标轴上的格点
self.dtaxisX.setTickCount(6)
self.vlaxisY.setTickCount(11)
#设置坐标轴名称
#设置网格不显示
self.vlaxisY.setGridLineVisible(False)
#把坐标轴添加到chart中
self.chart.addAxis(self.dtaxisX,Qt.AlignBottom)
self.chart.addAxis(self.vlaxisY,Qt.AlignLeft)
#把曲线关联到坐标轴
self.series.attachAxis(self.dtaxisX)
self.series.attachAxis(self.vlaxisY)
self.view = QChartView(self)
self.view.setChart(self.chart)
self.view.setFixedWidth(500)
self.view.setFixedHeight(400)
self.view.move(400, 10)
def timer_init(self):
#使用QTimer,2秒触发一次,更新数据
self.timer = QTimer(self)
self.timer.timeout.connect(self.drawLine)
self.timer.start(2000)
def drawLine(self):
#获取当前时间
bjtime = QDateTime.currentDateTime()
#更新X轴坐标
self.dtaxisX.setMin(QDateTime.currentDateTime().addSecs(-300*1))
self.dtaxisX.setMax(QDateTime.currentDateTime().addSecs(0))
#当曲线上的点超出X轴的范围时,移除最早的点
if(self.series.count()>149):
self.series.removePoints(0,self.series.count()-149)
#产生随即数
yint = random.randint(0,1500)
#添加数据到曲线末端
self.series.append(bjtime.toMSecsSinceEpoch(),yint)
"""主界面信息"""
def initUI(self):
"""主窗口"""
self.setFixedSize(910, 425)
self.setWindowTitle('Test')
self.show()
if __name__ == '__main__':
"""运行应用程序"""
app = QApplication(sys.argv)
app.aboutToQuit.connect(app.deleteLater)
gui = TsetUI()
sys.exit(app.exec_())
我想勾上表单上的打开折线框,右边QChartView 显示不同颜色的实时曲线,以名称为曲线名,勾选多个显示多条,去勾删除