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

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条回答 默认 最新

  • weixin_34318994 2021-04-24 14:51
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 matlab中的双层数值积分
  • ¥50 服务器打印水晶报表问题
  • ¥15 Delphi image图片缩放问题
  • ¥30 gradle环境下javafx项目如何使用druid连接池
  • ¥15 服务器打印水晶报表问题
  • ¥15 初学者用plt报错,求解答
  • ¥18 深度学习tensorflow1,ssdv1,coco数据集训练一个模型
  • ¥100 关于注册表摄像头和麦克风的问题
  • ¥30 代码本地运行正常,但是TOMCAT部署时闪退
  • ¥15 关于#python#的问题