示例#1
0
    def paintEvent(self, event):
        rect = QRect(10, 20, 80, 60)

        path = QPainterPath()
        path.moveTo(20, 80)
        path.lineTo(20, 30)
        path.cubicTo(80, 0, 50, 50, 80, 80)

        startAngle = 30 * 16
        arcLength = 120 * 16

        painter = QPainter(self)
        painter.setPen(self.pen)
        painter.setBrush(self.brush)
        if self.antialiased:
            painter.setRenderHint(QPainter.Antialiasing)

        for x in range(0, self.width(), 100):
            for y in range(0, self.height(), 100):
                painter.save()
                painter.translate(x, y)
                if self.transformed:
                    painter.translate(50, 50)
                    painter.rotate(60.0)
                    painter.scale(0.6, 0.9)
                    painter.translate(-50, -50)

                if self.shape == RenderArea.Line:
                    painter.drawLine(rect.bottomLeft(), rect.topRight())
                elif self.shape == RenderArea.Points:
                    painter.drawPoints(RenderArea.points)
                elif self.shape == RenderArea.Polyline:
                    painter.drawPolyline(RenderArea.points)
                elif self.shape == RenderArea.Polygon:
                    painter.drawPolygon(RenderArea.points)
                elif self.shape == RenderArea.Rect:
                    painter.drawRect(rect)
                elif self.shape == RenderArea.RoundedRect:
                    painter.drawRoundedRect(rect, 25, 25, Qt.RelativeSize)
                elif self.shape == RenderArea.Ellipse:
                    painter.drawEllipse(rect)
                elif self.shape == RenderArea.Arc:
                    painter.drawArc(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Chord:
                    painter.drawChord(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Pie:
                    painter.drawPie(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Path:
                    painter.drawPath(path)
                elif self.shape == RenderArea.Text:
                    painter.drawText(rect, Qt.AlignCenter,
                                     "PySide 2\nQt %s" % qVersion())
                elif self.shape == RenderArea.Pixmap:
                    painter.drawPixmap(10, 10, self.pixmap)

                painter.restore()

        painter.setPen(self.palette().dark().color())
        painter.setBrush(Qt.NoBrush)
        painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1))
示例#2
0
    def paintEvent(self, event):
        contents_y = self.edit.verticalScrollBar().value()
        page_bottom = contents_y + self.edit.viewport().height()
        font_metrics = self.fontMetrics()
        current_block = self.edit.document().findBlock(self.edit.textCursor().position())
        painter = QPainter(self)
        line_count = 0
        block = self.edit.document().begin()
        while block.isValid():
            line_count += 1
            position = self.edit.document().documentLayout().blockBoundingRect(block).topLeft()
            if position.y() > page_bottom:
                break
            bold = False
            if block == current_block:
                bold = True
                font = painter.font()
                font.setBold(True)
                painter.setFont(font)
                self.current = line_count
            painter.drawText(self.width() - font_metrics.width(str(line_count)) - 10,
                             round(position.y()) - contents_y + font_metrics.ascent(),
                             str(line_count))
            if bold:
                font = painter.font()
                font.setBold(False)
                painter.setFont(font)
            block = block.next()
        self.highest_line = line_count
        painter.end()

        QWidget.paintEvent(self, event)
示例#3
0
    def lineNumberAreaPaintEvent(self, e):
        self.verticalScrollBar().setSliderPosition(self.verticalScrollBar().sliderPosition())

        painter = QPainter(self.lineNumberArea)

        # draw the background
        background = self.lineNumberArea.palette().color(self.lineNumberArea.backgroundRole())
        painter.fillRect(e.rect(), background)

        currentBlockNumber = self.textCursor().blockNumber()
        blockNumber = self.getFirstVisibleBlockId()
        block = self.document().findBlockByNumber(blockNumber)

        prev_block = self.document().findBlockByNumber(blockNumber - 1) if blockNumber > 0 else block
        translate_y = - self.verticalScrollBar().sliderPosition() if blockNumber > 0 else 0

        # Adjust text position according to the previous "non entirely visible" block if applicable
        # Also takes in consideration the document's margin offset.
        if blockNumber == 0:
            # Simply adjust to document's margin
            additional_margin = self.document().documentMargin() - 1 - self.verticalScrollBar().sliderPosition()
        else:
            # Getting the height of the visible part of the previous "non entirely visible" block
            # additional_margin = self.document().documentLayout().blockBoundingRect(prev_block).translated(
            #     0, translate_y).intersect(self.viewport().geometry().height())
            additional_margin = self.document().documentLayout().blockBoundingRect(prev_block).translated(
                0, translate_y).intersected(self.viewport().geometry()).height()

        # Shift the starting point
        top = self.viewport().geometry().top() + additional_margin
        bottom = top + self.document().documentLayout().blockBoundingRect(block).height()

        col_1 = QColor(90, 255, 30)     # Current line (custom green)
        col_0 = QColor(120, 120, 120)   # Other lines  (custom darkgrey)

        # Draw the numbers (displaying the current line number in green)
        while block.isValid() and top <= e.rect().bottom():
            if block.isVisible() and bottom >= e.rect().top():
                number = str(int(blockNumber + 1))
                painter.setPen(col_1 if currentBlockNumber == blockNumber else col_0)
                painter.drawText(0,
                                 top,
                                 self.lineNumberArea.width() - self.lineNumberArea.rightMargin,
                                 self.fontMetrics().height(),
                                 Qt.AlignRight,
                                 number)

            block = block.next()
            top = bottom
            bottom = top + self.document().documentLayout().blockBoundingRect(block).height()
            blockNumber += 1
示例#4
0
    def draw(cls, x, y, self: PreparedText, painter: QPainter):
        font = QFont(self.fontName)
        if self.fontSize:
            font.setPointSizeF(self.fontSize)
        if self.fontBold:
            font.setBold(True)
        if self.fontItalic:
            font.setItalic(True)
        brushStyle = self.brushStyle or Qt.BrushStyle.SolidPattern
        w = self.width
        h = self.height
        tx = self.left + x
        ty = self.top + y
        if self.border:
            w -= self.border.width
            h -= self.border.width * 2
            tx += self.border.width
            ty += self.border.width
        rect = QRectF(tx, ty, w, h)

        if self.backColor:
            painter.setBrush(brush_style_map[brushStyle])
            painter.fillRect(rect, QColor('#' + hex(self.backColor)[2:]))
        if self.allowTags:
            doc = QTextDocument()
            doc.setDefaultFont(font)
            doc.setHtml(self.text)
            doc.setDocumentMargin(0)
            painter.save()
            painter.translate(tx + 2, ty + 1)
            doc.drawContents(painter, QRectF(0, 0, self.width, self.height))
            painter.restore()
        else:
            painter.save()
            painter.setFont(font)
            flags = cls.textFlags(self)
            rect.setX(rect.x() + 2)
            rect.setY(rect.y() + 1)
            painter.drawText(rect, flags, self.text)
            painter.restore()
        if self.border and self.border.color is not None:
            old_pen = painter.pen()
            pen = QPen(
                QColor(self.border.color), self.border.width,
                pen_style_map.get(self.border.style, Qt.PenStyle.SolidLine))
            painter.setPen(pen)
            painter.drawLines(
                cls.getLines(self, self.left + x, self.top + y,
                             self.left + self.width + x,
                             self.top + y + self.height))
            painter.setPen(old_pen)
示例#5
0
    def paintEvent(self, event):
        side = min(self.width(), self.height())
        curr_time = self._time

        painter = QPainter()
        painter.begin(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.translate(self.width() / 2, self.height() / 2)

        # draw clock frame
        painter.setBrush(QBrush(self.background_color))
        r = side / 2
        painter.drawEllipse(QPoint(0, 0), side / 2, side / 2)

        for i in range(0, 12):
            x, y = self.rotate_point(0, -r * 0.95, i * 360 / 12)
            painter.drawEllipse(x - 3, y - 3, 6, 6)

        painter.setPen(self.text_color)
        for i in range(0, 12):
            x, y = self.rotate_point(0, -r * 0.85, i * 360 / 12)
            painter.drawText(QRect(x - 10, y - 10, 20, 20), Qt.AlignCenter,
                             "%d" % i)

        painter.setPen(self.background_color)
        painter.setBrush(QBrush(self.min_pin_color))
        for j in range(0, 60):
            if j % 5 != 0:
                x, y = self.rotate_point(0, -r * 0.95, j * 360 / 60)
                painter.drawEllipse(x - 1, y - 1, 2, 2)
        painter.setClipping(False)

        # draw hands
        painter.setBrush(QBrush(self.hour_pin_color))

        painter.save()
        self.hour_pin[2] = QPoint(0, int(-r * 0.6))
        painter.rotate(30.0 * (curr_time.hour() + curr_time.minute() / 60.0))
        painter.drawConvexPolygon(self.hour_pin)
        painter.restore()

        painter.setBrush(QBrush(self.min_pin_color))

        painter.save()
        self.minute_pin[2] = QPoint(0, int(-r * 0.9))
        painter.rotate(6.0 * (curr_time.minute() + curr_time.second() / 60.0))
        painter.drawConvexPolygon(self.minute_pin)
        painter.restore()

        painter.end()
示例#6
0
    def drawText(self, painter: QPainter) -> None:
        """  """
        painter.save()
        textFont: QFont = QFont()
        textFont.setBold(True)
        painter.setFont(textFont)

        count: int = len(self.__listItem)
        self.__initLen = 0

        # 横向导航时,字符区域取条目元素中最长的字符宽度
        longText: str = ""
        for item in self.__items.split("|"):
            if len(item) > len(longText):
                longText = item

        if self.horizontal:
            textLen: Decimal = Decimal(painter.fontMetrics().width(longText))
        else:
            textLen: Decimal = Decimal(painter.fontMetrics().height())

        # 逐个绘制元素列表中的文字及文字背景
        for i in range(count):
            strText: str = self.__listItem[i][0]
            left: QPointF = QPointF(self.__initLen, 0)
            right: QPointF = QPointF(self.__initLen + textLen + self.__space,
                                     self.height())

            if not self.horizontal:
                left = QPointF(0, self.__initLen)
                right = QPointF(self.width(),
                                self.__initLen + textLen + self.__space)

            textRect: QRectF = QRectF(left, right)
            self.__listItem[i][1] = textRect

            if self.__isVirgin:
                self.__barRect = textRect
                self.__isVirgin = False

            # 当前选中区域的文字显示选中文字颜色
            if textRect == self.__listItem[self.__currentIndex][1]:
                painter.setPen(self.__textSelectColor)
            else:
                painter.setPen(self.__textNormalColor)

            painter.drawText(textRect, Qt.AlignCenter, strText)
            self.__initLen += textLen + self.__space

        painter.restore()
示例#7
0
    def paintEvent(self, event):  # pylint: disable=invalid-name, unused-argument
        p = QPainter(self)
        p.setRenderHint(QPainter.Antialiasing, True)
        p.setPen(Qt.NoPen)
        track_opacity = self._track_opacity
        thumb_opacity = 1.0
        text_opacity = 1.0
        if self.isEnabled():
            track_brush = self._track_color[self.isChecked()]
            thumb_brush = self._thumb_color[self.isChecked()]
            text_color = self._text_color[self.isChecked()]
        else:
            track_opacity *= 0.8
            track_brush = self.palette().shadow()
            thumb_brush = self.palette().mid()
            text_color = self.palette().shadow().color()

        p.setBrush(track_brush)
        p.setOpacity(track_opacity)
        p.drawRoundedRect(
            self._margin,
            self._margin,
            self.width() - 2 * self._margin,
            self.height() - 2 * self._margin,
            self._track_radius,
            self._track_radius,
        )
        p.setBrush(thumb_brush)
        p.setOpacity(thumb_opacity)
        p.drawEllipse(
            self.offset - self._thumb_radius,
            self._base_offset - self._thumb_radius,
            2 * self._thumb_radius,
            2 * self._thumb_radius,
        )
        p.setPen(text_color)
        p.setOpacity(text_opacity)
        font = p.font()
        font.setPixelSize(1.5 * self._thumb_radius)
        p.setFont(font)
        p.drawText(
            QRectF(
                self.offset - self._thumb_radius,
                self._base_offset - self._thumb_radius,
                2 * self._thumb_radius,
                2 * self._thumb_radius,
            ),
            Qt.AlignCenter,
            self._thumb_text[self.isChecked()],
        )
    def paint(self, painter: QPainter, option: QStyleOptionGraphicsItem,
              index: QWidget) -> None:
        """
		Paint the graphics of the action wrapper including action name, number, and ports.

		:param painter: This draws the widget.
		:type painter: QPainter
		:param option: Option for the style of graphic.
		:type option: QStyleOptionGraphicsItem
		:param index: Index for the painted graphic.
		:type index: QWidget
		:return: None
		:rtype: NoneType
		"""
        ActionGraphics.paint(self, painter, option, index)

        # Get dimensions of the action
        x, y, width, height = self.getActionRect(self._action.getInputPorts(),
                                                 self._action.getOutputPorts())

        # Draw the number tag.
        number = str(
            self._action.getParent().getActions().index(self._action) + 1)
        offset = 5
        radius = 15
        size = ActionGraphics.H_SPACE / 2 - offset * 2
        painter.setBrush(QColor(29, 110, 37))
        painter.drawRoundedRect(QRectF(x + offset, y + offset, size, size),
                                radius, radius)
        painter.setPen(ActionWrapperGraphics.TAG_TEXT_COLOR)
        painter.setBrush(ActionWrapperGraphics.TAG_TEXT_COLOR)
        painter.setFont(ActionWrapperGraphics.TAG_FONT)
        fm = QFontMetricsF(ActionWrapperGraphics.TAG_FONT)
        pixelsWide = fm.width(number)
        pixelsHigh = fm.height()
        # TODO: fix text positioning - font metrics aren't working well
        painter.drawText(x + offset + size / 2 - pixelsWide,
                         y + offset + size / 2 + pixelsHigh / 2, number)

        # Draw the name of the action
        painter.setPen(ActionWrapperGraphics.NAME_TEXT_COLOR)
        painter.setBrush(ActionWrapperGraphics.NAME_TEXT_COLOR)
        painter.setFont(ActionWrapperGraphics.NAME_FONT)
        fm = QFontMetricsF(ActionWrapperGraphics.NAME_FONT)
        br = fm.boundingRect(self._action.getName())
        # TODO: fix text positioning - font metrics aren't working well
        t = fm.elidedText(self._action.getName(), Qt.ElideRight,
                          self._width - offset * 2)
        painter.drawText(x + offset, br.height(), t)
示例#9
0
    def paint(self, painter: QPainter, option: QStyleOptionViewItem,
              index: QModelIndex):
        """Paint a cell according index and option
        
        Args:
            painter (QPainter)
            option (QStyleOptionViewItem)
            index (QModelIndex)
        """

        # Draw background selections
        if option.state & QStyle.State_Selected:
            select_color = option.palette.color(QPalette.Normal,
                                                QPalette.Highlight)
            text_color = option.palette.color(QPalette.Normal,
                                              QPalette.BrightText)
            painter.fillRect(option.rect, select_color)

        else:
            text_color = option.palette.color(QPalette.Normal, QPalette.Text)

        # get icon and color background
        icon = index.data(Qt.DecorationRole)
        icon_color = index.data(Qt.BackgroundColorRole)

        # draw icon background
        area = QRect(option.rect.x(), option.rect.y(), option.rect.height(),
                     option.rect.height())
        painter.setPen(Qt.NoPen)
        painter.setBrush(QColor(icon_color))
        painter.drawRect(area)

        # Draw icon
        if icon:
            icon_area = area.adjusted(3, 3, -3, -3)
            painter.drawPixmap(icon_area, icon.pixmap(icon_area.size()))

        # Draw text
        text_rect = option.rect
        text_rect.setLeft(option.rect.height() + 3)

        light_font = QFont()
        dark_font = QFont()

        word = index.data(Qt.DisplayRole)
        font = QFont("monospace")
        painter.setFont(font)
        painter.setPen(QPen(text_color))
        painter.drawText(text_rect, Qt.AlignLeft | Qt.AlignVCenter, word)
    def drawCurrentBg_ZFB(self, painter: QPainter) -> None:
        painter.save()

        # 圆半径为高度一定比例,计算宽度,将宽度等分
        width: int = self.width() // self.__maxStep
        height: int = self.height() // 3
        radius: int = height // 3
        initX: int = width // 2
        initY: int = self.height() // 2

        # 绘制当前圆
        painter.setPen(Qt.NoPen)
        painter.setBrush(self.__currentBackground)

        for i in range(self.__currentStep - 1):
            initX += width

        painter.drawEllipse(QPoint(initX, initY), radius, radius)

        initX = initX - width // 4
        initY = 0
        height = self.height() // 4

        # 绘制当前上部提示信息背景
        bgRect: QRect = QRect(initX, initY, width // 2, height)
        painter.setBrush(self.__currentBackground)
        painter.drawRoundedRect(bgRect, height / 2, height / 2)

        # 绘制当前上部提示信息
        font: QFont = QFont()
        font.setPixelSize(height / 1.9)
        font.setBold(True)
        painter.setFont(font)
        painter.setPen(self.__currentForeground)
        painter.drawText(bgRect, Qt.AlignCenter,
                         self.__topInfo[self.__currentStep - 1])

        # 绘制倒三角
        centerX: int = initX + width // 4
        offset: int = 10
        pts: QPolygon = QPolygon()
        pts.append(QPoint(centerX - offset, height))
        pts.append(QPoint(centerX + offset, height))
        pts.append(QPoint(centerX, height + offset))

        painter.setPen(Qt.NoPen)
        painter.drawPolygon(pts)

        painter.restore()
示例#11
0
    def paintEvent(self, e):
        """ Draws the color bar and arrow """
        if self.item():
            painter = QPainter(self)

            # Draws the color bar
            painter.setPen(Qt.NoPen)
            rect = QRect(0, 0, self.COLOR_BAR_WIDTH, self.COLOR_BAR_HEIGHT)
            painter.fillRect(rect,
                             self.item().data(renderSetupRoles.NODE_COLOR_BAR))
            oldBrush = painter.brush()

            if self.item().type(
            ) == renderSetup.RENDER_OVERRIDE_TYPE and self.item(
            ).isLocalRender():
                diameter = rect.width() - 2
                rect2 = QRect(rect.x() + 1,
                              rect.y() + (rect.height() - diameter) / 2,
                              diameter, diameter)
                brush = painter.brush()
                pen = painter.pen()
                hints = painter.renderHints()

                painter.setRenderHint(QPainter.Antialiasing, on=True)
                painter.setPen(Qt.NoPen)
                painter.setBrush(
                    QBrush(QColor(67, 79, 70), style=Qt.SolidPattern))
                painter.drawEllipse(rect2)

                painter.setRenderHints(hints)
                painter.setPen(pen)
                painter.setBrush(brush)

            # Draws the arrow
            painter.setBrush(self.ARROW_COLOR)
            if self.arrowPoints == BaseDelegate.EXPANDED_ARROW:
                painter.translate(self.EXPANDED_ARROW_OFFSET, 0.0)
            else:
                painter.translate(self.COLLAPSED_ARROW_OFFSET, 0.0)
            painter.drawPolygon(self.arrowPoints)
            painter.setBrush(oldBrush)

            # Draws the node type text
            painter.setPen(QPen(self.item().data(Qt.TextColorRole)))
            text = self.item().data(renderSetupRoles.NODE_TYPE_STR)
            painter.setFont(self.item().data(Qt.FontRole))
            painter.drawText(self.NODE_TYPE_TEXT_RECT, text,
                             QTextOption(Qt.AlignLeft | Qt.AlignVCenter))
示例#12
0
    def paintEvent(self, ev):
        """
        Manually implemented paint event

        :param ev: the QT paint event
        :return:
        """
        h = self.height()
        w = self.width()
        p = QPainter(self)
        p.setClipRect(ev.region().boundingRect())
        pen = QPen(QColor(0, 0, 0))
        pen.setWidth(4)
        ls = QFontMetricsF(p.font()).lineSpacing()
        for idx, t in enumerate(sorted(list(self._loadData.keys()))):
            y = 10 + idx * ls
            pen.setColor(ThreadToColor.singleton.get(t))
            p.setPen(pen)
            p.drawLine(QLineF(15, y, 15 + 15, y))
            pen.setColor(QColor(0, 0, 0))
            p.setPen(pen)
            p.drawText(QPointF(35, y), t)

        if len(self._loadData) > 0:
            right = max([
                polygon[polygon.count() - 1].x()
                for _, polygon in self._loadData.items()
            ])
        else:
            right = 0.0
        p.translate(w - 10 - right * 20, h - 10)
        p.scale(
            20, -(h - 20)
        )  # x direction: 20 pixels per second, y direction: spread between 10 and h-10
        topleft = p.transform().inverted()[0].map(QPointF(10, 10))
        pen.setWidthF(0)
        pen.setCosmetic(True)
        left = topleft.x()
        p.setRenderHint(QPainter.Antialiasing, True)
        p.setPen(pen)
        p.drawLine(QLineF(left, 0, right, 0))
        p.drawLine(QLineF(left, 0, left, 1))
        idx = 0
        for t, polygon in self._loadData.items():
            pen.setColor(ThreadToColor.singleton.get(t))
            p.setPen(pen)
            p.drawPolyline(polygon)
        p.end()
示例#13
0
 def createDropTextPixmap(self):
     pixmap = QPixmap(481, 300)
     pixmap.fill(QColor("#333333"))
     painter = QPainter(pixmap)
     font = QFont("Arial")
     font.setPixelSize(28)
     font.setBold(True)
     fm = QFontMetrics(font)
     painter.setFont(font)
     painter.setPen(QPen(QColor("#888888"), 1))
     text = "Drop the tileset image here"
     x = (pixmap.width()-fm.width(text))/2
     y = (pixmap.height()+fm.height())/2
     painter.drawText(x, y, text)
     del painter
     return pixmap
    def draw_monitor_label(self, painter: QPainter, rect: QRectF, txt: str):
        painter.save()
        font = self.monitor_label_font
        font_metrics = QFontMetrics(font, painter.device())

        bounding_rect = font_metrics.boundingRect(rect.toRect(), 0, txt)
        x_factor = rect.width() / bounding_rect.width()
        y_factor = rect.height() / bounding_rect.height()
        factor = min(x_factor, y_factor)

        font.setPointSizeF(font.pointSizeF() * factor)
        painter.setFont(font)
        painter.setPen(self.monitor_label_font_color)

        painter.drawText(rect, Qt.AlignCenter, txt)
        painter.restore()
示例#15
0
    def paintEvent(self, event: QPaintEvent):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        # Draw background
        painter.setBrush(QBrush(self._bg_colors[self._state.mode]))
        painter.drawRect(event.rect())

        # Draw digit
        font = QFontDatabase.systemFont(QFontDatabase.FixedFont)
        font.setPixelSize(int(self.width() * 6 / 7))
        digit = str(self._state.digit) if self._state.digit != 0 else ' '
        painter.setPen(self._fg_color)
        painter.setFont(font)
        flags = Qt.AlignCenter | Qt.TextJustificationForced
        painter.drawText(event.rect(), flags, digit)
示例#16
0
 def textComponent(self):
     if self.rpb_textActive:
         textPainter = QPainter(self)
         penText = QPen()
         penText.setColor(
             QColor(self.rpb_textColor[0], self.rpb_textColor[1],
                    self.rpb_textColor[2]))
         textPainter.setPen(penText)
         fontText = QFont()
         fontText.setFamily(self.rpb_textFont)
         fontText.setPointSize(self.rpb_textWidth)
         textPainter.setFont(fontText)
         textPainter.drawText(self.positionX + self.textFactorX,
                              self.positionY + self.textFactorY,
                              self.rpb_textValue)
         textPainter.end()
    def drawBg_TB(self, painter: QPainter) -> None:
        painter.save()

        # 圆半径为高度一定比例,计算宽度,将宽度等分
        width: int = self.width() // self.__maxStep
        height: int = self.height() // 3
        radius: int = height // 2
        initX: int = width // 2
        initY: int = self.height() // 2

        # 逐个绘制连接线条
        pen: QPen = QPen()
        pen.setWidthF(radius / 4)
        pen.setCapStyle(Qt.RoundCap)
        pen.setColor(self.__background)
        painter.setPen(pen)
        painter.setBrush(Qt.NoBrush)

        for i in range(self.__maxStep - 1):
            painter.drawLine(QPoint(initX, initY),
                             QPoint(initX + width, initY))
            initX += width

        # 逐个绘制圆
        initX: int = width // 2
        painter.setPen(Qt.NoPen)
        painter.setBrush(self.__background)

        for i in range(self.__maxStep):
            painter.drawEllipse(QPoint(initX, initY), radius, radius)
            initX += width

        # 逐个绘制圆中的数字
        initX = width // 2
        font: QFont = QFont()
        font.setPixelSize(radius)
        painter.setFont(font)
        painter.setPen(self.__foreground)
        painter.setBrush(Qt.NoBrush)

        for i in range(self.__maxStep):
            textRect: QRect = QRect(initX - radius, initY - radius, radius * 2,
                                    radius * 2)
            painter.drawText(textRect, Qt.AlignCenter, str(i + 1))
            initX += width

        painter.restore()
示例#18
0
文件: lightmap.py 项目: SanPen/QtMap
    def paintEvent(self, event):
        p = QPainter()
        p.begin(self)
        self._normalMap.render(p, event.rect())

        p.setPen(Qt.black)
        p.drawText(
            self.rect(), Qt.AlignBottom | Qt.TextWordWrap,
            "GridCal, Map data CCBYSA 2009 "
            "OpenStreetMap.org contributors")
        p.end()

        if self.invert:
            p = QPainter(self)
            p.setCompositionMode(QPainter.CompositionMode_Difference)
            p.fillRect(event.rect(), Qt.white)
            p.end()
示例#19
0
def draw_text(painter: QPainter, x: float, y: float, flags, text: str):
    # Originally from
    # https://stackoverflow.com/questions/24831484/how-to-align-qpainter-drawtext-around-a-point-not-a-rectangle
    size = 32767.0
    corner = QPointF(x, y - size)
    if flags & Qt.AlignHCenter:
        corner.setX(corner.x() - size / 2.0)
    elif flags & Qt.AlignRight:
        corner.setX(corner.x() - size)
    if flags & Qt.AlignVCenter:
        corner.setY(corner.y() + size / 2.0)
    elif flags & Qt.AlignTop:
        corner.setY(corner.y() + size)
    else:
        flags |= Qt.AlignBottom
    rect = QRectF(corner.x(), corner.y(), size, size)
    painter.drawText(rect, int(flags), text)
示例#20
0
class QPainterDrawText(unittest.TestCase):
    def setUp(self):
        self.painter = QPainter()
        self.text = "teste!"

    def tearDown(self):
        del self.text
        del self.painter

    def testDrawText(self):
        # bug #254
        rect = self.painter.drawText(100, 100, 100, 100, Qt.AlignCenter | Qt.TextWordWrap, self.text)
        self.assert_(isinstance(rect, QRect))

    def testDrawTextWithRect(self):
        # bug #225
        rect = QRect(100, 100, 100, 100)
        newRect = self.painter.drawText(rect, Qt.AlignCenter | Qt.TextWordWrap, self.text)

        self.assert_(isinstance(newRect, QRect))

    def testDrawTextWithRectF(self):
        """QPainter.drawText(QRectF, ... ,QRectF*) inject code"""
        rect = QRectF(100, 52.3, 100, 100)
        newRect = self.painter.drawText(rect, Qt.AlignCenter | Qt.TextWordWrap, self.text)

        self.assert_(isinstance(newRect, QRectF))

    def testDrawOverloads(self):
        """Calls QPainter.drawLines overloads, if something is
           wrong Exception and chaos ensues. Bug #395"""
        self.painter.drawLines([QLine(QPoint(0, 0), QPoint(1, 1))])
        self.painter.drawLines([QPoint(0, 0), QPoint(1, 1)])
        self.painter.drawLines([QPointF(0, 0), QPointF(1, 1)])
        self.painter.drawLines([QLineF(QPointF(0, 0), QPointF(1, 1))])
        self.painter.drawPoints([QPoint(0, 0), QPoint(1, 1)])
        self.painter.drawPoints([QPointF(0, 0), QPointF(1, 1)])
        self.painter.drawConvexPolygon(
            [QPointF(10.0, 80.0), QPointF(20.0, 10.0), QPointF(80.0, 30.0), QPointF(90.0, 70.0)]
        )
        self.painter.drawConvexPolygon([QPoint(10.0, 80.0), QPoint(20.0, 10.0), QPoint(80.0, 30.0), QPoint(90.0, 70.0)])
        self.painter.drawPolygon([QPointF(10.0, 80.0), QPointF(20.0, 10.0), QPointF(80.0, 30.0), QPointF(90.0, 70.0)])
        self.painter.drawPolygon([QPoint(10.0, 80.0), QPoint(20.0, 10.0), QPoint(80.0, 30.0), QPoint(90.0, 70.0)])
        self.painter.drawPolyline([QPointF(10.0, 80.0), QPointF(20.0, 10.0), QPointF(80.0, 30.0), QPointF(90.0, 70.0)])
        self.painter.drawPolyline([QPoint(10.0, 80.0), QPoint(20.0, 10.0), QPoint(80.0, 30.0), QPoint(90.0, 70.0)])
示例#21
0
    def paintEvent(self, event):
        painter = QPainter(self)
        if self.frame_nub == 1:
            painter.setPen(QPen(self.line_color['1'], 3))
            painter.drawLine(QLine(37, 30, 37, 106))
            painter.setPen(QPen(self.line_color['2'], 3))
            painter.drawLine(QLine(37, 106, 37, 161))
            painter.setPen(QPen(self.line_color['3'], 3))
            painter.drawLine(QLine(37, 161, 37, 295))
            painter.setPen(QPen(self.line_color['4'], 3))
            painter.drawLine(QLine(37, 295, 37, 493))
        elif self.frame_nub == 2:
            painter.setPen(QPen(self.line_color['1'], 3))
            painter.drawLine(QLine(37, 30, 37, 106))
            painter.setPen(QPen(self.line_color['2'], 3))
            painter.drawLine(QLine(37, 106, 37, 161 + 280))

            # 표가 그려지는 부분 -------------------------------------------------
            painter.setPen(QPen(self.line_color['3'], 2))
            table_counter = 0
            for i in range(0, 200, 40):
                for j in range(0, 450, 150):
                    rect = QRect(70 + j, 200 + i, 150, 40)

                    # 특정 제한치 이상부터 경고 색으로 바뀜 -----------------------
                    if table_counter in [5, 8, 11, 14]:
                        if table_counter == 5:
                            if int(self.step_info['2'][2.5][table_counter]) >= 160:
                                painter.fillRect(rect, QColor(250, 142, 145))
                            else:
                                painter.fillRect(rect, QColor(234, 234, 234))
                        else:
                            if int(self.step_info['2'][2.5][table_counter]) >= 50:
                                painter.fillRect(rect, QColor(250, 142, 145))
                            else:
                                painter.fillRect(rect, QColor(234, 234, 234))
                    else:
                        painter.fillRect(rect, QColor(234, 234, 234))
                    # ---------------------------------------------------------
                    painter.drawRect(rect)
                    painter.drawText(rect, Qt.AlignCenter,
                                     self.step_info['2'][2.5][table_counter])
                    table_counter += 1
            # ------------------------------------------------------------------
        self.update()
示例#22
0
    def drawValue(self, painter: QPainter) -> None:
        if not self.__showValue: return

        radius: int = 100
        painter.save()
        painter.setPen(self.__textColor)

        font: QFont = QFont()
        font.setPixelSize(radius - 50 if self.__showPointer else radius - 15)
        font.setBold(True)
        painter.setFont(font)

        textRect: QRectF = QRectF(-radius, -radius, radius * 2, radius * 2)
        value = round(self.__value, self.__precision)
        strValue: str = str(
            int(value)) if self.__precision is 0 else str(value)
        painter.drawText(textRect, Qt.AlignCenter, strValue)
        painter.restore()
示例#23
0
    def paintEvent(self, event):  # pylint: disable=unused-argument
        painter = QPainter(self)

        if self.highlight is not None:
            # TODO use config colors
            painter.fillRect(
                0,
                5 + 20*self.highlight,
                self.width(),
                20,
                QBrush(QColor(0xc0, 0xc0, 0xc0, 0xff))
            )

        painter.setFont(Conf.disasm_font)
        y = 20
        for line in self.lines:
            painter.drawText(0, y, line)
            y += 20
示例#24
0
    def paint(
        self,
        painter: QtGui.QPainter,
        option: QtWidgets.QStyleOptionGraphicsItem,
        widget: QtWidgets.QWidget = None,
    ):
        view = next(iter(self.scene().views()))

        painter.setRenderHint(QtGui.QPainter.Antialiasing)
        painter.setFont(self.font)
        painter.setPen(self.pen)

        fm = painter.fontMetrics()

        painter.drawLine(self.line)

        if not self.line.p1().isNull():
            pen = QtGui.QPen(self.pen)
            pen.setWidth(10)
            painter.setPen(pen)
            painter.drawPoints([self.line.p1(), self.line.p2()])
            painter.setPen(self.pen)

        if view is not None and self.text != "":
            angle = self.line.angle()
            if 90 < angle < 270:
                angle -= 180
            center = view.mapFromScene(self.line.center())
            length = (
                view.mapFromScene(QtCore.QRectF(0, 0, self.line.length(), 1))
                .boundingRect()
                .width()
            )
            width = fm.boundingRect(self.text).width()

            if width < length * 0.9:
                painter.save()
                painter.resetTransform()
                transform = QtGui.QTransform()
                transform.translate(center.x(), center.y())
                transform.rotate(-angle)
                painter.setTransform(transform)
                painter.drawText(-width / 2.0, -fm.descent(), self.text)
                painter.restore()
示例#25
0
    def drawBaseImage(self, backgroundFile, titleText, titleFont, fontSize, alignment,\
                       xOffset, yOffset, textColor, visColor):
        if backgroundFile == '':
            im = Image.new("RGB", (1280, 720), "black")
        else:
            im = Image.open(backgroundFile)

        if self._image == None or not self.lastBackgroundImage == backgroundFile:
            self.lastBackgroundImage = backgroundFile

            # resize if necessary
            if not im.size == (1280, 720):
                im = im.resize((1280, 720), Image.ANTIALIAS)

            self._image = ImageQt(im)

        self._image1 = QtGui.QImage(self._image)
        painter = QPainter(self._image1)
        font = titleFont
        font.setPixelSize(fontSize)
        painter.setFont(font)
        painter.setPen(QColor(*textColor))

        yPosition = yOffset

        fm = QtGui.QFontMetrics(font)
        if alignment == 0:  #Left
            xPosition = xOffset
        if alignment == 1:  #Middle
            xPosition = xOffset - fm.width(titleText) / 2
        if alignment == 2:  #Right
            xPosition = xOffset - fm.width(titleText)
        painter.drawText(xPosition, yPosition, titleText)
        painter.end()

        buffer = QtCore.QBuffer()
        buffer.open(QtCore.QIODevice.ReadWrite)
        self._image1.save(buffer, "PNG")

        strio = io.BytesIO()
        strio.write(buffer.data())
        buffer.close()
        strio.seek(0)
        return Image.open(strio)
示例#26
0
    def paintEvent(self, event):
        # Set checked depending on state
        self.image.setFileName(ThemeManager.CHECKED_PATH if self.
                               enabled else ThemeManager.UNCHECKED_PATH)

        # Init painter and draw image at correct location
        painter = QPainter(self)
        pixmap = QPixmap.fromImageReader(self.image)
        painter.setRenderHint(QPainter.HighQualityAntialiasing, True)
        painter.drawPixmap(0, (self.height() - pixmap.height()) / 2, pixmap)

        # Style font and draw text at correct location
        painter.setFont(self.font)
        pen = QPen()
        pen.setColor(ThemeManager.LABEL_QC if any([self.hovered, self.enabled])
                     else ThemeManager.LABEL_LOW_OPACITY_QC)
        painter.setPen(pen)
        painter.drawText(pixmap.width() + self.padding,
                         self.height() / 2 + self.nameHeight / 4, self.name)
示例#27
0
    def paint(self, painter: QPainter, option: QStyleOptionViewItem,
              index: QModelIndex):
        # Change table item foreground (pen color) to red color if it's highlighted
        highlighted_palette = False

        if option.state & QStyle.State_Selected:
            if option.state & QStyle.State_Active:
                painter.fillRect(option.rect, option.palette.highlight())
                highlighted_palette = True
            elif not (option.state & QStyle.State_HasFocus):
                painter.fillRect(option.rect, option.palette.background())

        if index.data(TableItemDataRole.HIGHLIGHT):
            painter.setPen(
                QColor(255, 128, 128) if highlighted_palette else Qt.red)
        else:
            painter.setPen(Qt.black)

        painter.drawText(option.rect, Qt.AlignCenter, index.data())
示例#28
0
文件: view.py 项目: arptra/Corewar
    def draw_cursor_rect(self, pos: Tuple[int, int], brush, addr):
        painter = QPainter(self.cursors_pixmap)

        cursor_rect = QRect(self.byte_rect)
        h = cursor_rect.height()
        i, j = pos

        cursor_rect.moveTopLeft(QPoint(i * self.byte_advance, j * h))

        painter.setPen(Qt.NoPen)
        painter.setBrush(brush)
        painter.drawRect(cursor_rect)

        painter.setFont(self.font)
        txt = self.bytes_field[addr][0]
        painter.setPen(PEN_BCK)
        painter.drawText(cursor_rect, Qt.AlignCenter, f'{txt}')

        painter.end()
    def paintEvent(self, event: QPaintEvent):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        painter.eraseRect(event.rect())

        painter.setBrush(QBrush(self._bg))
        painter.drawRect(event.rect())

        if self.mode == 'revealed':
            self.setFrameStyle(QFrame.Panel | QFrame.Plain)
            self.setLineWidth(0)
            self.setMidLineWidth(0)
            if self.content in self.content_colors.keys():
                font = QFontDatabase.systemFont(QFontDatabase.FixedFont)
                font.setPixelSize(int(self.width() * 5 / 6))
                painter.setPen(self.content_colors[self.content])
                painter.setFont(font)
                flags = Qt.AlignCenter | Qt.TextJustificationForced
                painter.drawText(event.rect(), flags, self.content)

            if self.content == 'bomb':
                loc = 'exploded_bomb' if self.was_clicked_bomb else 'bomb'
                painter.drawImage(event.rect(),
                                  QImage(self.image_locations[loc]))

        if self.mode == 'hidden':
            self.setFrameStyle(QFrame.Panel | QFrame.Raised)
            self.setLineWidth(3)
            self.setMidLineWidth(2)

        if self.mode == 'false_bomb':
            painter.drawImage(event.rect(),
                              QImage(self.image_locations['false_bomb']))

        if self.mode == 'flag':
            self.setFrameStyle(QFrame.Panel | QFrame.Raised)
            self.setLineWidth(3)
            self.setMidLineWidth(2)
            painter.drawImage(event.rect(),
                              QImage(self.image_locations['flag']))

        super(CellWidget, self).paintEvent(event)
    def drawCurrentText_JD(self, painter: QPainter) -> None:
        width: int = self.width() // self.__maxStep
        height: int = self.height() // 2
        initX: int = 0
        initY: int = height

        painter.save()
        font: QFont = QFont()
        font.setPixelSize(height / 3)
        painter.setFont(font)
        painter.setPen(self.__currentBackground)
        painter.setBrush(Qt.NoBrush)

        for i in range(self.__currentStep):
            textRect: QRect = QRect(initX, initY, width, height)
            painter.drawText(textRect, Qt.AlignCenter, self.__topInfo[i])
            initX += width

        painter.restore()
示例#31
0
    def paintEvent(self, _: QPaintEvent) -> None:
        """Qt Paint Event: ensures the title-bar text is elided properly and stays centered"""
        painter = QPainter()
        painter.begin(self)
        painter.setPen(self.__font_pen)

        # bold font for macOS window titles
        font = self.font()
        if sys.platform in ["darwin", "linux"]:
            font.setBold(True)
        font_metrics = QFontMetrics(font)

        # calculate text properties
        text_width: int = self.width(
        ) - self.__button_bar_width - self.__margin
        text: str = font_metrics.elidedText(self.__original_text,
                                            Qt.ElideRight, text_width)

        # calculate height
        br: QRect = font_metrics.boundingRect(text)
        if br.height() > 0:
            self.__br_height = br.height()
        py = self.__ofs_y - self.__br_height / 2.0
        br_width = br.width()

        # calculate width
        px = (self.width() - br_width - WIDTH_PADDING_PX) / 2.0
        if px < self.__button_bar_width:
            if self.__window_buttons_position == WINDOW_BUTTONS_RIGHT:
                if text != self.__original_text:
                    px = self.__margin
                else:
                    px = px - (self.__button_bar_width - px)
            else:
                px = self.__button_bar_width

        # draw title
        rect = QRectF(px, py, br_width + WIDTH_PADDING_PX, self.__br_height)
        painter.setFont(font)
        if DEBUG:
            painter.setBrush(QBrush(QColor('#ff0000')))
            painter.drawRect(rect)
        painter.drawText(rect, Qt.AlignLeft, text)
示例#32
0
class SzumWidget(QWidget):
    def __init__(self, parent=None):
        super(SzumWidget, self).__init__(parent)
        self.setFixedSize(50, 50)
        self._ertek = 0
        self._p_id = 0
        self.painter = QPainter()

    def _set_p_id(self, number):
        self._p_id = number
        self.update()

    def _set_ertek(self, number):
        self._ertek = number
        self.update()

    def _get_p_id(self):
        return self._p_id

    def _get_ertek(self):
        return self._ertek

    def paintEvent(self, event):
        self.painter.begin(self)
        pen0 = QPen()
        pen0.setWidth(0)
        pen_def = self.painter.pen()
        pen_white = QPen(QColor(255, 255, 255))
        pen_black = QPen(QColor(0, 0, 0))
        pen_blue = QPen(QColor(0, 0, 255))
        pen_red = QPen(QColor(255, 0, 0))
        brush_black = QBrush(QColor(0, 0, 0))
        brush_ready = QBrush(QColor(170, 255, 255))
        brush_csak1 = QBrush(QColor(255, 255, 255))

        self.painter.setBrush(brush_csak1)
        self.painter.setPen(pen0)
        self.painter.drawRect(0, 0, 49, 49)
        self.painter.setPen(pen_black)
        self.painter.drawText(25, 30, str(self._ertek))

        self.painter.end()
示例#33
0
    def paintEvent(self, event):
        sineTable = [
            0, 38, 71, 92, 100, 92, 71, 38, 0, -38, -71, -92, -100, -92, -71,
            -38
        ]

        metrics = QFontMetrics(self.font())
        x = (self.width() - metrics.horizontalAdvance(self.text)) / 2
        y = (self.height() + metrics.ascent() - metrics.descent()) / 2
        color = QColor()

        painter = QPainter(self)
        for i in range(len(self.text)):
            index = (self.step + i) % 16
            color.setHsv((15 - index) * 16, 255, 191)
            painter.setPen(color)
            painter.drawText(x,
                             y - ((sineTable[index] * metrics.height()) / 400),
                             str(self.text[i]))
            x += metrics.horizontalAdvance(self.text[i])
示例#34
0
    def paintEvent(self, event):

        if self.address is None:
            return

        MARGIN_LEFT = 5
        MARGIN_TOP = 5
        LINE_MARGIN = 3

        painter = QPainter(self)

        painter.setPen(QPen(Qt.black, 1))
        painter.setFont(Conf.symexec_font)

        x = MARGIN_LEFT
        y = MARGIN_TOP

        for obj in self._objects:

            obj_type = type(obj)

            if obj_type is NewLinePiece:
                # carriage return
                x = MARGIN_LEFT
                y += Conf.symexec_font_height + LINE_MARGIN
            elif obj_type is AddressPiece:
                # address
                addr_str = "%08x" % obj.address
                painter.drawText(x, y + Conf.symexec_font_ascent, addr_str)
                x += Conf.symexec_font_width * len(addr_str)
                x += 7
            elif obj_type is QASTViewer:
                # AST viewer
                obj.x = x
                obj.y = y
                obj.paint(painter)

                x += obj.width + 2
            else:
                raise TypeError('paintEvent(): Unsupported object type %s.' %
                                obj_type)
示例#35
0
    def paintEvent(self, event):
        painter = QPainter(self)
        painter.fillRect(self.rect(), Qt.black)

        if self.pixmap.isNull():
            painter.setPen(Qt.white)
            painter.drawText(self.rect(), Qt.AlignCenter,
                    "Rendering initial image, please wait...")
            return

        if self.curScale == self.pixmapScale:
            painter.drawPixmap(self.pixmapOffset, self.pixmap)
        else:
            scaleFactor = self.pixmapScale / self.curScale
            newWidth = int(self.pixmap.width() * scaleFactor)
            newHeight = int(self.pixmap.height() * scaleFactor)
            newX = self.pixmapOffset.x() + (self.pixmap.width() - newWidth) / 2
            newY = self.pixmapOffset.y() + (self.pixmap.height() - newHeight) / 2

            painter.save()
            painter.translate(newX, newY)
            painter.scale(scaleFactor, scaleFactor)
            exposed, _ = painter.matrix().inverted()
            exposed = exposed.mapRect(self.rect()).adjusted(-1, -1, 1, 1)
            painter.drawPixmap(exposed, self.pixmap, exposed)
            painter.restore()

        text = "Use mouse wheel or the '+' and '-' keys to zoom. Press and " \
                "hold left mouse button to scroll."
        metrics = painter.fontMetrics()
        textWidth = metrics.width(text)

        painter.setPen(Qt.NoPen)
        painter.setBrush(QColor(0, 0, 0, 127))
        painter.drawRect((self.width() - textWidth) / 2 - 5, 0, textWidth + 10,
                metrics.lineSpacing() + 5)
        painter.setPen(Qt.white)
        painter.drawText((self.width() - textWidth) / 2,
                metrics.leading() + metrics.ascent(), text)