예제 #1
0
    def drawLegend(self, painter):
        rect = self.getRectPlotter()

        painter.save()

        fontMetricsF = QFontMetricsF(self._fontLegend)
        painter.setFont(self._fontLegend)
        rect_legend = QRect(rect.left(), rect.top() - fontMetricsF.height(), fontMetricsF.width(self._legend) + 10,
                            fontMetricsF.height())
        painter.drawText(rect_legend, self._legend)

        painter.rectore()
예제 #2
0
    def drawTitle(self, painter):
        rect = self.getRectPlotter()

        painter.save()

        fontMetricsF = QFontMetricsF(self._fontTitle)
        painter.setFont(self._fontTitle)
        title = self._date.toString('dd.MM.yyyy')
        rect_title = QRect(rect.left() + (rect.width() / 2) - (fontMetricsF.width(title) / 2),
                           rect.top() - fontMetricsF.height(), fontMetricsF.width(self._legend) + 10,
                           fontMetricsF.height())
        painter.drawText(rect_title, self._legend)

        painter.rectore()
예제 #3
0
    def drawTitleY(self, painter):
        rect = self.getRectPlotter()

        painter.save()

        fontMetricsF = QFontMetricsF(self._fontTitleY)
        painter.setFont(self._fontTitleY)
        rect_titley = QRect(-(rect.top() + (rect.height() / 2) + (fontMetricsF.width(self._titleY) / 2)),
                            (rect.left() / 2) - fontMetricsF.height(),
                            fontMetricsF.width(self._titleY),
                            fontMetricsF.height())
        painter.rotate(-90)
        painter.drawText(rect_titley, self._legend)

        painter.rectore()
예제 #4
0
    def drawGridX(self, painter):
        rect = self.getRectPlotter()
        if not rect.isValid():
            return
        painter.save()

        painter.setFont(self._fontGrid)
        painter.setPen(QPen(Qt.black))
        painter.setBrush(Qt.NoBrush)

        # Axis ticks
        dxmsec = rect.width() / self._plotterScale.Scale.X.span()
        fontMetricsF = QFontMetricsF(self._fontGrid)
        index = findIndex(fontMetricsF.width('   00:00   ') / dxmsec, BasePlotter._mSecs_for_grid)
        msec0 = self._plotterScale.Scale.X.Min
        offset = findOffset(msec0, BasePlotter._mSecs_for_grid[index])
        dx = dxmsec * BasePlotter._mSecs_for_grid[index]
        step = BasePlotter._mSecs_for_grid[index]

        for x in numpy.arange(rect.left() - dxmsec * offset, rect.right(), dx):
            if x < rect.left():
                continue

            painter.save()

            heightTick = 3
            datetimelabel = QDateTime.fromMSecsSinceEpoch(msec0, Qt.UTC)

            if step >= 60000:  # больше минуты
                if step >= 86400000:  # больше суток
                    label = datetimelabel.toString('dd.MM.yy')
                    if datetimelabel.time().minute() == 0:
                        heightTick = 8
                        painter.setPen(Qt.SolidLine)
                else:
                    t0 = QDateTime.fromMSecsSinceEpoch(self._plotterScale.Scale.X.Min, Qt.UTC)
                    t1 = QDateTime.fromMSecsSinceEpoch(self._plotterScale.Scale.X.Max, Qt.UTC)
                    if (datetimelabel.time().hour() == 0 and datetimelabel.time().minute() == 0) and (
                                t1.date() > t0.date()):  # Метка даты. Появляется,если листаем график между днями
                        font = QFont(painter.font().family(), painter.font().pointSize())
                        font.setBold(True)
                        painter.setFont(font)
                        label = datetimelabel.toString('dd.MM.yy')
                    else:
                        label = datetimelabel.toString('hh:mm')
                        if datetimelabel.time().minute() == 0:
                            heightTick = 8
                            painter.setPen(Qt.SolidLine)
                        if datetimelabel.time().minute() == 30:
                            heightTick = 6
                            painter.setPen(Qt.DashLine)
                        if datetimelabel.time().minute() == 15 or datetimelabel.time().minute() == 45:
                            heightTick = 4
                            painter.setPen(Qt.DashLine)
            else:
                label = datetimelabel.time().toString('hh:mm:ss')

            painter.drawLine(x, rect.bottom(), x, rect.top())
            rect_label = QRectF(x - fontMetricsF.width(label) / 2, rect.bottom() + heightTick,
                                fontMetricsF.width(label), 2 * fontMetricsF.height())
            painter.drawLine(x, rect.bottom() - heightTick, x, rect.bottom() + heightTick)
            painter.drawText(rect_label, label)

            msec0 += step

            painter.restore()

        painter.restore()