コード例 #1
0
class QtChartCanvas(QWidget):
    def __init__(self, parent=None):
        super(QtChartCanvas, self).__init__(parent)
        self.plotChart = QChart()
        self.plotChart.legend().hide()
        self.verticalLayout = QtWidgets.QVBoxLayout(self)

        self.plotView = QChartView(self.plotChart)
        self.verticalLayout.addWidget(self.plotView)
        # self.setCentralWidget(self.plotView)

        self.plotCurve = QSplineSeries()
        self.plotCurve.setUseOpenGL(True)
        self.plotCurve.pen().setColor(Qt.red)
        self.plotChart.addSeries(self.plotCurve)

        self.plotChart.createDefaultAxes()
        # self.plotChart.axisX().setLabelFormat('%d')
        self.plotChart.axisX().hide()

        self.RecvData = []  # 存储接收到的传感器数据
        self.RecvIndx = 0

        self.setLockY = True

        self.isTop = False
        self.minY = 0
        self.maxY = 100

    def update_figure(self, payload):
        self.RecvData.append(payload["data"])
        self.RecvData = self.RecvData[-20:]
        plotData = []
        #print("call")
        if self.isTop:
            for i, val in enumerate(self.RecvData):
                plotData.append(QPoint(i, val))

            self.plotCurve.replace(plotData)
            self.plotChart.axisX().setMax(len(plotData))
            if not self.setLockY:
                self.plotChart.axisY().setRange(min(self.RecvData),
                                                max(self.RecvData))
            else:
                self.plotChart.axisY().setRange(self.minY, self.maxY)

    def setYLimit(self, miny=0, maxy=100, lockY=True):
        self.setLockY = lockY
        if self.setLockY:
            self.maxY = maxy
            self.minY = miny
            # self.plotChart.axisY().setRange(miny,maxy)

    def changeTop(self, isTop):
        self.isTop = isTop
コード例 #2
0
class QtChartCanvas(QWidget):
    def __init__(self, parent=None):
        super(QtChartCanvas, self).__init__(parent)
        self.setStyleSheet("border:0;background-color:#263848")
        self.plotChart = QChart()
        self.plotChart.legend().hide()
        self.verticalLayout = QtWidgets.QVBoxLayout(self)

        self.plotView = QChartView(self.plotChart)
        self.plotView.setStyleSheet("border:0;background-color:#263848;")
        self.plotView.setBackgroundBrush(QBrush(QColor("#263848")))
        self.plotChart.setBackgroundBrush(QBrush(QColor("#263848")))

        #self.plotChart.setStyle()
        self.verticalLayout.addWidget(self.plotView)

        self.plotCurve = QSplineSeries()
        self.plotCurve.setColor(QColor("#AABFFF"))
        self.plotCurve.setUseOpenGL(True)
        self.plotCurve.pen().setColor(QColor("#FAF0FF"))
        self.plotChart.addSeries(self.plotCurve)

        # self.scatter=QScatterSeries()
        # self.scatter.setMarkerSize(8)
        # self.plotChart.addSeries(self.scatter)

        self.plotChart.createDefaultAxes()
        self.plotChart.axisY().setGridLineColor(QColor("#5D5C72"))
        self.plotChart.axisY().setLinePenColor(QColor("#9D9CA2"))
        self.plotChart.axisY().setLabelsColor(QColor("#F8F6F6"))
        self.plotChart.axisY().setRange(0, 100)
        self.plotChart.axisX().hide()

        self.RecvData = []  # 存储接收到的传感器数据
        self.RecvIndx = 0

        self.setLockY = True

        self.isTop = False
        self.minY = 0
        self.maxY = 100

    def update_figure(self, payload):
        data = payload["data"]
        self.RecvData.append(data)
        self.RecvData = self.RecvData[-20:]
        plotData = []
        if self.isTop:
            for i, val in enumerate(self.RecvData):
                plotData.append(QPoint(i, val))
            self.plotCurve.replace(plotData)
            #self.scatter.replace(plotData)
            self.plotChart.axisX().setMax(len(plotData))
            if not self.setLockY:
                self.plotChart.axisY().setRange(
                    min(self.RecvData) * 0.5,
                    max(self.RecvData) * 1.3)
            else:
                self.plotChart.axisY().setRange(self.minY, self.maxY)

    def setYLimit(self, miny=0, maxy=100, lockY=True):
        self.setLockY = lockY
        if self.setLockY:
            self.maxY = maxy
            self.minY = miny

    def changeTop(self, isTop):
        self.isTop = isTop