weixin_34318994
weixin_34318994
2021-04-23 22:21
采纳率: 100%
浏览 32

python qt5 QtChart显示的问题

 

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 显示不同颜色的实时曲线,以名称为曲线名,勾选多个显示多条,去勾删除

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

相关推荐