示例#1
0
    def drawInfo(self,
                 x,
                 y,
                 name1,
                 name2=None,
                 textColor=QColor(Qt.white),
                 color2=QColor(Qt.white)):
        textColor.setAlpha(200)
        painter = QPainter()

        painter.begin(self)
        painter.setPen(QPen(textColor))
        font = painter.font()
        font.setPointSize(font.pointSize())
        painter.setFont(font)
        painter.drawText(x, y, name1)
        painter.end()

        if name2 is not None:
            painter.begin(self)
            color2.setAlpha(200)
            painter.setPen(QPen(color2))
            font = painter.font()
            font.setPointSize(font.pointSize())
            painter.setFont(font)
            painter.drawText(x + 30, y, name2)
            painter.end()
示例#2
0
    def drawVal(self, painter: QtGui.QPainter):
        count = self.prim
        da = (self.finishA - self.startA) / count
        dv = (self.finishV - self.startV) / count
        w = QtGui.QFontMetrics(painter.font()).width(
            self.f_str.format(self.finishV))
        for i in range(count + 1):
            v = self.startV + i * dv
            w = max(
                w,
                QtGui.QFontMetrics(painter.font()).width(self.f_str.format(v)))

        h = QtGui.QFontMetrics(painter.font()).height()

        for i in range(count + 1):
            painter.save()
            painter.translate(self.x, self.y)
            a = -self.startA - da * i
            painter.rotate(a)
            v = self.startV + i * dv
            l = self.r + self.linewidth + h + 4 + w / 2
            painter.translate(l, 0)
            painter.rotate(-a)
            painter.drawText(-w / 2, -h / 2, w, h, QtCore.Qt.AlignCenter,
                             self.f_str.format(v))
            painter.restore()
示例#3
0
 def paintEvent(self, event):
     painter = QPainter(self)
     if self.pixmap:
         painter.drawPixmap(0, 0, self.pixmap)
     rect = QRect(0, 0, self.width(), self.height())
     margin = 25
     pad = 10
     if self.distance:
         txt = QLocale().toString(self.distance / 1000, 'f', 1) + ' km'
         fm = QFontMetrics(painter.font())
         rect = fm.boundingRect(txt)
         rect = fm.boundingRect(rect, 0, txt)
         rect.adjust(-pad, 0, pad, 0)
         rect.moveBottomRight(
             QPoint(self.width() - margin,
                    self.height() - margin))
         if self.intersectsMarkers(rect):
             rect.moveTopRight(QPoint(self.width() - margin, margin))
         painter.fillRect(rect, QColor(255, 255, 255, 192))
         painter.drawText(rect, Qt.AlignCenter, txt)
     if self.duration:
         minutes = math.floor(self.duration / 60)
         seconds = self.duration - minutes * 60
         txt = '%u:%02u min.' % (minutes, seconds)
         fm = QFontMetrics(painter.font())
         rect = fm.boundingRect(txt)
         rect = fm.boundingRect(rect, 0, txt)
         rect.adjust(-pad, 0, pad, 0)
         rect.moveBottomLeft(QPoint(margin, self.height() - margin))
         if self.intersectsMarkers(rect):
             rect.moveTopLeft(QPoint(margin, margin))
         painter.fillRect(rect, QColor(255, 255, 255, 192))
         painter.drawText(rect, Qt.AlignCenter, txt)
示例#4
0
 def set_w_h(self, form):
     painter = QPainter()
     painter.begin(form)
     font = painter.font()
     font.setPixelSize(self.font_size)
     painter.setFont(font)
     fm = QFontMetrics(painter.font())
     self.width = fm.width(self.text)
     self.height = fm.height()
     painter.end()
示例#5
0
文件: qtgra.py 项目: ydanilin/alchem
 def paintEvent(self, event):
     print('hujFrame PaintEvent()', event.rect())
     painter = QPainter()
     rect = painter.viewport()
     print('hujFrame painter.viewport()', event.rect())
     painter.begin(self)
     painter.save()
     font = painter.font()
     font.setPixelSize(56)
     painter.setFont(font)
     # painter.translate(100, 100)
     rectangle = QRect(160, 160, 100, 50)
     boundingRect = painter.drawText(rectangle, 0, self.tr("Hello"))
     pen = painter.pen()
     pen.setStyle(Qt.DotLine)
     painter.setPen(pen)
     painter.drawRect(
         boundingRect.adjusted(0, 0, -pen.width(), -pen.width()))
     pen.setStyle(Qt.DashLine)
     painter.setPen(pen)
     painter.drawRect(rectangle.adjusted(0, 0, -pen.width(), -pen.width()))
     painter.restore()
     painter.end()
     del painter
     super(hujFrame, self).paintEvent(event)
示例#6
0
 def paintEvent(self, event):
     painter = QPainter()
     painter.begin(self)
     if self.pos_x0 == -20:
         pass
     else:
         pen = QPen(Qt.white, 2, Qt.SolidLine)
         painter.setPen(pen)
         painter.drawLine(self.pos_x0, self.pos_y0, self.pos_x, self.pos_y)
         dy = self.pos_y - self.pos_y0
         dx = self.pos_x - self.pos_x0
         if dx == 0:
             theta = 0.5 * pi
         else:
             theta = arctan(dy / dx)
         theta *= 180 / pi
         length = int(sqrt(dx**2 + dy**2) * 10) / 10
         font = painter.font()
         font.setPointSize(18)
         painter.setFont(font)
         painter.drawText(
             self.pos_x, self.pos_y,
             str(int(abs(theta) * 100) / 100) + " deg, " + str(length) +
             " px")
     painter.end()
    def paint(self):

        try:
            pixmap_bg = QPixmap(self.size())
            pixmap_bg.fill(QColor(50, 50, 250))

            painter = QPainter()
            painter.begin(pixmap_bg)
            if not self.app.reconstruction is None:
                photo = self.app.reconstruction.macro_photo
                size_draw = QSize(min(self.width(),
                                      photo.size().width()),
                                  min(self.height(),
                                      photo.size().height()))

                painter.setPen(Qt.red)
                font = painter.font()
                font.setPixelSize(48)
                painter.setFont(font)
                target = QRect(QPoint(0, 0), size_draw)
                source = QRect(
                    self.position,
                    QPoint(size_draw.width(), size_draw.height()) +
                    self.position)
                painter.drawPixmap(target, photo, source)

                for slice in self.app.reconstruction.slices:
                    painter.drawRect(slice.rect.x() - self.position.x(),
                                     slice.rect.y() - self.position.y(),
                                     slice.rect.width(), slice.rect.height())
                    coords = slice.rect.getCoords()
                    painter.drawText(
                        QPoint(coords[0], coords[3]) - self.position,
                        str(slice.id))

                if len(self.app.reconstruction.ruler_points) > 0:
                    painter.drawEllipse(
                        self.app.reconstruction.ruler_points[0] -
                        self.position, 10, 10)
                if len(self.app.reconstruction.ruler_points) > 1:
                    p0 = self.app.reconstruction.ruler_points[0]
                    p1 = self.app.reconstruction.ruler_points[1]
                    painter.drawEllipse(p1 - self.position, 10, 10)
                    painter.drawLine(
                        p0 - self.position,
                        p1 - self.position,
                    )
                    painter.drawLine(p0 - self.position, p1 - self.position)
                    p0_np = np.array(p0)
                    p1_np = np.array(p1)

                    # for i in range(13):

            painter.end()
            self.setPixmap(pixmap_bg)

        except:
            self.logger.error(sys.exc_info()[0])
            self.logger.error(traceback.format_exc())
            pass
示例#8
0
 def getFileIcon(self):
     #
     _text = Path(self.alt).name
     _suffix = Path(self.alt).suffix.upper()
     _suffix = _suffix[1:] if _suffix else "(Unknown)"
     _pixmap = QPixmap(120, 120)
     _pixmap.fill(QColor(0, 0, 0, 0))
     _painter = QPainter(_pixmap)
     _painter.setRenderHints(QPainter.Antialiasing
                             | QPainter.TextAntialiasing)
     # draw rounded rect
     _pen = _painter.pen()
     _pen.setWidth(2)
     _painter.setPen(_pen)
     _painter.drawRoundedRect(QRect(1, 1, 118, 118), 15, 15)
     # draw suffix text
     _rect = QRect(8, 10, 108, 35)  #100*25
     _painter.setPen(QPen(QColor("#0f59a4")))
     _painter.setFont(CFG.FONT_ICON_SUFFIX('MFHistoryItem'))
     _painter.drawText(_rect, Qt.AlignHCenter | Qt.TextSingleLine, _suffix)
     _painter.setPen(_pen)
     # draw splitter
     _painter.drawLine(1, 40, 118, 40)
     # draw suffix text
     _rect = QRect(8, 45, 108, 110)  #100*65
     _painter.setFont(CFG.FONT_ICON_NAME('MFHistoryItem'))
     _fm = QFontMetrics(_painter.font())
     # _elided_text = _fm.elidedText(_text, Qt.ElideMiddle, _rect.width(), Qt.TextWrapAnywhere)
     _painter.drawText(_rect, Qt.AlignHCenter | Qt.TextWrapAnywhere, _text)
     del _painter
     return _pixmap
示例#9
0
文件: views.py 项目: mjr129/groot
    def __draw_position(self, painter: QPainter):
        text = str(self.domain.start)
        lx = self.rect.left() - QFontMetrics(painter.font()).width(text) / 2

        painter.setPen(DRAWING.POSITION_TEXT)
        painter.drawText(QPointF(lx,
                                 self.rect.top() - DRAWING.TEXT_MARGIN), text)
示例#10
0
    def __init__(self, pixmap, text, size=0.5, corner=BottomRight):
        super().__init__()

        base_pixmap = QPixmap(pixmap)
        base_size = base_pixmap.size()
        base_max = min(base_size.height(), base_size.width())
        if not base_max:
            # Because gridsync.gui.systray.animation.currentPixmap() returns
            # a blank pixmap when unpausing the animation for the first time.
            # Returning early to prevents QPainter from spewing warnings.
            self.swap(base_pixmap)
            return

        badge_max = base_max * size
        pen_width = badge_max * 0.05
        rect = QRect(base_max * max(corner[0] - size, 0) + pen_width,
                     base_max * max(corner[1] - size, 0) + pen_width,
                     badge_max - pen_width, badge_max - pen_width)

        painter = QPainter(base_pixmap)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setPen(QPen(Qt.red, pen_width))
        painter.setBrush(QBrush(Qt.red))
        painter.drawEllipse(rect)

        if text:
            font = painter.font()
            font.setPixelSize(badge_max - pen_width)
            painter.setFont(font)
            painter.setPen(Qt.white)
            painter.drawText(rect, Qt.AlignCenter, str(text))

        painter.end()
        self.swap(base_pixmap)
示例#11
0
    def printDocument(self, printer):
        loop = QEventLoop()
        result = False

        def printPreview(success):
            nonlocal result
            result = success
            loop.quit()

        progressbar = QProgressDialog(self.m_page.view())
        progressbar.findChild(QProgressBar).setTextVisible(False)
        progressbar.setLabelText("Wait please...")
        progressbar.setRange(0, 0)
        progressbar.show()
        progressbar.canceled.connect(loop.quit)
        self.m_page.print(printer, printPreview)
        loop.exec_()
        progressbar.close()
        if not result:
            painter = QPainter()
            if painter.begin(printer):
                font = painter.font()
                font.setPixelSize(20)
                painter.setFont(font)
                painter.drawText(QPointF(10, 25),
                                 "Could not generate print preview.")
                painter.end()
    def paintEvent(self, e):

        qp = QPainter()
        qp.begin(self)

        font = QFont(qp.font())
        font.setPixelSize(self.width() * 1.0)
        qp.setFont(font)

        #pen = QPen(Qt.black)
        #pen.setWidth(10)
        #qp.setPen(pen)

        fr = self.frameRect()
        b = self.lineWidth()
        fr.adjust(b, b, -b, -b)

        #qp.fillRect(fr, QColor(255, 255, 255))

        if self.number is None:
            number = "-"
        else:
            number = str(self.number)

        qp.drawText(fr, Qt.AlignCenter, number)

        qp.end()

        super().paintEvent(e)
示例#13
0
    def draw_indicator(indicator: int):
        pixmap = QPixmap(24, 24)

        painter = QPainter(pixmap)
        w, h = pixmap.width(), pixmap.height()

        painter.fillRect(0, 0, w, h, QBrush((QColor(0, 0, 200, 255))))

        pen = QPen(QColor("white"))
        pen.setWidth(2)
        painter.setPen(pen)

        font = util.get_monospace_font()
        font.setBold(True)
        font.setPixelSize(16)
        painter.setFont(font)

        f = QFontMetrics(painter.font())
        indicator_str = str(indicator) if indicator < 10 else "+"

        fw = f.width(indicator_str)
        fh = f.height()
        painter.drawText(math.ceil(w / 2 - fw / 2), math.ceil(h / 2 + fh / 4),
                         indicator_str)

        painter.end()
        return QIcon(pixmap)
    def paintEvent(self, event):
        content_rect = self.contentsRect()
        if self.spinner_size:
            size = min(self.spinner_size, content_rect.width(),
                       content_rect.height())
        else:
            size = min(content_rect.width(), content_rect.height())
        dot_count = 5
        dot_size = int(size / dot_count) * 1.5

        spinner_rect = QRect(content_rect.left(), content_rect.top(), size,
                             size)

        painter = QPainter(self)
        painter.setClipRect(content_rect)

        if self.timer_id:
            diff_height = content_rect.height() - size
            offs_y = 0
            if diff_height > 0:
                if self.vertical_align == Qt.AlignVCenter:
                    offs_y = diff_height / 2
                elif self.vertical_align == Qt.AlignBottom:
                    offs_y = diff_height

            x_center = spinner_rect.left(
            ) + spinner_rect.width() / 2 - dot_size / 2
            y_center = spinner_rect.top(
            ) + offs_y + spinner_rect.height() / 2 - dot_size / 2

            painter.save()
            for i in range(dot_count):
                if self.counter % dot_count == i:
                    painter.setBrush(QBrush(QColor(0, 0, 0)))
                    d_size = dot_size * 1.1
                else:
                    painter.setBrush(QBrush(QColor(200, 200, 200)))
                    d_size = dot_size

                r = size / 2 - dot_size / 2
                x = r * math.cos(2 * math.pi * i / dot_count)
                y = r * math.sin(2 * math.pi * i / dot_count)
                painter.drawEllipse(x_center + x, y_center + y, d_size, d_size)
            painter.restore()

        if self.message:
            # painter.setPen(QPen(Qt.black))
            if self.font_size:
                f = painter.font()
                f.setPointSize(self.font_size)
                painter.setFont(f)

            text_rect = QRect(content_rect)
            text_rect.translate(
                spinner_rect.width() +
                SpinnerWidget.SPINNER_TO_TEXT_DISTANCE if self.timer_id else 0,
                0)
            painter.drawText(text_rect, Qt.AlignLeft | Qt.AlignVCenter,
                             self.message)
        painter.end()
示例#15
0
    def paintEvent(self, event):
        painter = QPainter(self)
        x = 10
        y = 10

        font = painter.font()
        font.setPixelSize(13)
        painter.setFont(font)

        for i in range(settings.w + 1):
            painter.drawLine(x, 10, x, settings.h * settings.size + 10)
            x += settings.size
        for i in range(settings.h + 1):
            painter.drawLine(10, y, settings.w * settings.size + 10, y)
            y += settings.size
        s = [
            '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12',
            '13', '14', '15', '16', '17', '18', '19', '20'
        ]
        x = settings.size / 2 + 5
        for symbol in s:
            painter.drawText(x, 10, symbol)
            x += settings.size
        d = [
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
            'N', 'O', 'P', 'Q', 'R', 'S', 'T'
        ]
        y = settings.size / 2 + 12
        for symbol in d:
            painter.drawText(0, y, symbol)
            y += settings.size
示例#16
0
    def paintEvent(self, event):
        label = self.text_true if self.isChecked() else self.text_false
        bg_color = Qt.darkGreen if self.isChecked() else Qt.red

        radius = 10
        width = 32
        center = self.rect().center()

        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.translate(center)
        painter.setBrush(QColor(0, 0, 0))

        pen = QPen(Qt.black)
        pen.setWidth(2)
        painter.setPen(pen)

        painter.drawRoundedRect(QRect(-width, -radius, 2 * width, 2 * radius),
                                radius, radius)
        painter.setBrush(QBrush(bg_color))
        sw_rect = QRect(-radius, -radius, width + radius, 2 * radius)
        if not self.isChecked():
            sw_rect.moveLeft(-width)
        painter.drawRoundedRect(sw_rect, radius, radius)
        painter.setPen(QPen(self.text_color))
        font = painter.font()
        font.setPixelSize(math.ceil(1.8 * radius))
        painter.setFont(font)

        painter.drawText(sw_rect, Qt.AlignCenter, label)
示例#17
0
def makeSplash():
    """
    This makes a splash screen that has the current FOQUS version
    information as well as all of the third party dependency
    information
    """
    # Load the splash screen background svg, gonna draw text over
    pixmap = QPixmap(':/icons/icons/ccsiSplash2.svg')
    # Make a painter to add text to
    painter = QPainter(pixmap)
    font = painter.font()  # current font for drawing text
    font.setPointSize(8)
    font.setBold(True)
    painter.setFont(font)
    painter.drawText(20, 110, "Version: {}".format(ver.version))
    font.setBold(False)
    painter.setFont(font)
    painter.drawText(
        20, 200, 740, 50,
        QtCore.Qt.AlignTop | QtCore.Qt.AlignLeft | QtCore.Qt.TextWordWrap,
        "License: {}".format(ver.license))
    painter.drawText(
        20, 250, 740, 50,
        QtCore.Qt.AlignTop | QtCore.Qt.AlignLeft | QtCore.Qt.TextWordWrap,
        "Support: {}".format(ver.support))
    painter.drawText(
        20, 300, 740, 300,
        QtCore.Qt.AlignTop | QtCore.Qt.AlignLeft | QtCore.Qt.TextWordWrap,
        ver.copyright)
    painter.end()
    splashScr[1] = QSplashScreen(pixmap=pixmap)
示例#18
0
文件: textedit.py 项目: hubitor/GROM
    def lineNumberAreaPaintEvent(
            self, event):  # When text zoomed line number not zoomed
        """Painting line number area"""
        painter = QPainter(self.lineNumberArea)
        painter.fillRect(event.rect(), Qt.lightGray)

        block = self.firstVisibleBlock()
        blockNumber = block.blockNumber()
        top = int(
            self.blockBoundingGeometry(block).translated(
                self.contentOffset()).top())
        bottom = top + int(self.blockBoundingRect(block).height())
        # font_height = self.fontMetrics().height()

        while block.isValid() and top <= event.rect().bottom():

            if block.isVisible() and bottom >= event.rect().top():
                font_original = self.document().defaultFont()
                size = font_original.pointSize()
                font = painter.font()
                font.setPointSize(size)
                painter.setFont(font)

                number = str(blockNumber + 1)
                painter.setPen(Qt.black)
                painter.drawText(0, top, self.lineNumberArea.width(),
                                 self.fontMetrics().height(), Qt.AlignRight,
                                 number)

            block = block.next()
            top = bottom
            bottom = top + int(self.blockBoundingRect(block).height())
            blockNumber += 1
示例#19
0
    def draw_indicator(indicator: int):
        pixmap = QPixmap(24, 24)

        painter = QPainter(pixmap)
        w, h = pixmap.width(), pixmap.height()

        painter.fillRect(0, 0, w, h, QBrush((QColor(0, 0, 200, 255))))

        pen = QPen(QColor("white"))
        pen.setWidth(2)
        painter.setPen(pen)

        font = util.get_monospace_font()
        font.setBold(True)
        font.setPixelSize(16)
        painter.setFont(font)

        f = QFontMetrics(painter.font())
        indicator_str = str(indicator) if indicator < 10 else "+"

        fw = f.width(indicator_str)
        fh = f.height()
        painter.drawText(math.ceil(w / 2 - fw / 2), math.ceil(h / 2 + fh / 4), indicator_str)

        painter.end()
        return QIcon(pixmap)
def paintGame(painter: QPainter):
    global board
    painter.fillRect(0, 0, 700, 700, Qt.white)  # ERSCHAFFT FREIEN PLATZ OBEN
    painter.fillRect(0, 100, 700, 600, Qt.blue)  # FUELLT RECHTECK AUS

    pen = painter.pen()  # STIFT WIRD ERZEUGT
    pen.setWidth(3)
    painter.setPen(pen)  # PEN WIRD ANGESETZ

    # We offset the rows by one to leave space to "throw the chips"
    for y in range(2, rows):
        y1 = y * 100
        x1 = 0
        x2 = 700
        painter.drawLine(x1, y1, x2, y1)  # HORIZONTALE LINIEN

    for x in range(1, cols):
        y1 = 100
        y2 = 700
        x1 = x * 100
        painter.drawLine(x1, y1, x1, y2)  # VERTIKALE LINIEN

    font = painter.font()
    font.setPixelSize(80)  # PIXELGROESSE VON FONT
    painter.setFont(font)

    for y in range(rows):  # BERECHNET STELLE IM FELD AUF X EBENE
        for x in range(cols):  # BERECHNET STELLE IM FELD AUF Y EBENE
            if board[x][y] != '_':
                painter.drawText(x * 100, y * 100, 100, 100, Qt.AlignCenter,
                                 board[x][y])
示例#21
0
文件: gauge.py 项目: estan/gauges
 def paintEvent(self, event):
     painter = QPainter(self)
     font = painter.font()
     font.setPointSize(self.width() / 6.0)
     painter.setFont(font)
     painter.drawText(self.rect(), Qt.AlignCenter | Qt.AlignVCenter, str(self.value()))
     QDial.paintEvent(self, event)
示例#22
0
    def paintEvent(self, event=None):
        side = min(self.width(), self.height())
        pos = self.value
        ref_pos = self.refValue

        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.translate(self.width() / 2 + 10, self.height() / 2)
        painter.scale(side / 230.0, side / 230.0)

        painter.setBrush(Qt.NoBrush)
        painter.setPen(QColor(0, 0, 0))

        painter.drawRect(-100, -100, 2 * 100, 2 * 100)

        for i in range(20):
            x = -100 + i * 10
            painter.drawLine(x, 100, x, 98)
            painter.drawLine(x, -100, x, -98)
            painter.drawLine(-100, x, -98, x)
            painter.drawLine(100, x, 98, x)

        painter.drawLine(-100, 0, 100, 0)
        painter.drawLine(-100, 50, 100, 50)
        painter.drawLine(-100, -50, 100, -50)
        painter.drawLine(-50, -100, -50, 100)
        painter.drawLine(50, 100, 50, -100)
        painter.drawLine(0, -100, 0, 100)

        painter.setBrush(self.ref_color)
        painter.setPen(self.ref_color)
        painter.drawEllipse(
            (ref_pos[0] * (100 / self.range_x)) - self.pointWidth,
            (ref_pos[1] * -(100 / self.range_y)) - self.pointWidth,
            2.1 * self.pointWidth, 2.1 * self.pointWidth)

        painter.setBrush(self.color)
        painter.drawEllipse((pos[0] * (100 / self.range_x)) - self.pointWidth,
                            (pos[1] * -(100 / self.range_y)) - self.pointWidth,
                            2 * self.pointWidth, 2 * self.pointWidth)

        #        painter.save()
        #        painter.setPen(QColor(0,0,0))
        #        painter.rotate(180)
        #        for i in range(2):
        #            painter.drawLine(-1*((pos[0] * (100/self.scale)) - self.pointWidth/2), -1*((pos[1] * -(100/self.scale)) - self.pointWidth/2),
        #            -1*((pos[0] * (100/self.scale)) + self.pointWidth/2), -1*((pos[1] * -(100/self.scale)) + self.pointWidth/2))
        #            painter.rotate(180)
        #        painter.restore()

        painter.setPen(QColor(0, 0, 0))
        font = painter.font()
        font.setPointSize(font.pointSize() * 1.2)
        painter.setFont(font)

        painter.drawText(QRectF(-107, 102, 30, 20), str(self.scale_x[0]))
        painter.drawText(QRectF(90, 102, 30, 20), str(1 * self.scale_x[1]))

        painter.drawText(QRectF(-130, 90, 30, 20), str(self.scale_y[0]))
        painter.drawText(QRectF(-125, -105, 30, 20), str(1 * self.scale_y[1]))
示例#23
0
    def paintEvent(self, event):
        painter = QPainter(self)
        if self.pixmap:
            painter.drawPixmap(0, 0, self.pixmap)
        margin = 25
        pad = 10
        if self.objectPlan:
            txt = self.objectPlan
            fm = QFontMetrics(painter.font())
            rect = fm.boundingRect(txt)
            rect = fm.boundingRect(rect, 0, txt)
            rect.adjust(-pad, -pad, pad, pad)

            imageDir = self.config.get("display",
                                       "image_dir",
                                       fallback="images")
            iconPath = os.path.join(imageDir, 'text-x-generic.svg')
            icon = QIcon(iconPath)
            iconSize = icon.actualSize(rect.size())
            rect.adjust(0, 0, iconSize.width(), 0)

            rect.moveBottomLeft(QPoint(margin, self.height() - margin))
            painter.fillRect(rect, QColor(220, 220, 150, 225))

            iconRect = QRect(rect)
            iconRect.setWidth(iconSize.width())
            icon.paint(painter, iconRect)

            textRect = rect.adjusted(iconRect.width(), 0, 0, 0)
            painter.drawText(textRect, Qt.AlignCenter, txt)
示例#24
0
    def paintEvent(self, event):
        p = QPainter(self)
        p.setRenderHint(QPainter.Antialiasing)

        r = event.rect()

        outer = Qt.gray
        if self._is_pick:
            inner = Qt.yellow
        else:
            inner = Qt.white

        p.fillRect(r, QBrush(inner))
        pen = QPen(outer)
        pen.setWidth(1)
        p.setPen(pen)
        p.drawRect(r)

        if self.get_number() != 0:
            pen = QPen(QColor('#000000'))
            p.setPen(pen)
            f = p.font()
            f.setBold(True)
            p.setFont(f)
            p.drawText(r, Qt.AlignHCenter | Qt.AlignVCenter,
                       str(self.get_number()))
    def paintEvent(self, event):
        p = QPainter(self)

        if self.scrollEnabled:
            self.buffer.fill(qRgba(0, 0, 0, 0))
            pb = QPainter(self.buffer)
            pb.setPen(p.pen())
            pb.setFont(p.font())

            x = min(-self.scrollPos, 0) + self.leftMargin
            while x < self.width():
                pb.drawStaticText(
                    QPointF(x,
                            (self.height() - self.wholeTextSize.height()) / 2)
                    + QPoint(2, 2), self.staticText)
                x += self.wholeTextSize.width()

            #Apply Alpha Channel
            pb.setCompositionMode(QPainter.CompositionMode_DestinationIn)
            pb.setClipRect(self.width() - 15, 0, 15, self.height())
            pb.drawImage(0, 0, self.alphaChannel)
            pb.setClipRect(0, 0, 15, self.height())
            #initial situation: don't apply alpha channel in the left half of the image at all; apply it more and more until scrollPos gets positive
            if self.scrollPos < 0:
                pb.setOpacity((max(-8, self.scrollPos) + 8) / 8.0)
            pb.drawImage(0, 0, self.alphaChannel)

            p.drawImage(0, 0, self.buffer)
        else:
            x = (self.width() - self.wholeTextSize.width()) / 2
            y = (self.height() - self.wholeTextSize.height()) / 2
            p.drawStaticText(QPointF(x, y), self.staticText)
示例#26
0
    def paintEvent(self, event):
        if self.isVisible():
            block = self.editor.firstVisibleBlock()
            height = self.fontMetrics().height()
            number = block.blockNumber()
            painter = QPainter(self)
            painter.fillRect(event.rect(), lineBarColor)
            painter.drawRect(0, 0, event.rect().width() - 1, event.rect().height() - 1)
            font = painter.font()

            current_block = self.editor.textCursor().block().blockNumber() + 1

            while block.isValid():
                block_geometry = self.editor.blockBoundingGeometry(block)
                offset = self.editor.contentOffset()
                block_top = block_geometry.translated(offset).top()
                number += 1

                rect = QRect(0, block_top, self.width() - 5, height)

                if number == current_block:
                    font.setBold(True)
                else:
                    font.setBold(False)

                painter.setFont(font)
                painter.drawText(rect, Qt.AlignRight, '%i' % number)

                if block_top > event.rect().bottom():
                    break

                block = block.next()

            painter.end()
示例#27
0
class DigitImage(QLabel):
    def __init__(self, *args):
        super().__init__(*args)
        self.setFixedSize(200, 200)
        self.setStyleSheet('border: 3px solid grey;')

    @pyqtSlot(int)
    def drawDigit(self, digit):
        print(digit)
        self.painter = QPainter(self.pixmap())
        self.painter.begin(self.pixmap())

        font = self.painter.font()
        font.setPointSize(60)
        self.painter.setFont(font)

        self.painter.drawText(self.rect(), QtCore.Qt.AlignCenter, str(digit))
        self.painter.end()
        self.repaint()

    @pyqtSlot()
    def clear(self):
        self.painter.begin(self.pixmap())
        self.painter.eraseRect(self.rect())
        self.painter.end()
        self.repaint()
示例#28
0
文件: textedit.py 项目: hovo1990/GROM
    def lineNumberAreaPaintEvent(self, event):  # When text zoomed line number not zoomed
        """Painting line number area"""
        painter = QPainter(self.lineNumberArea)
        painter.fillRect(event.rect(), Qt.lightGray)

        block = self.firstVisibleBlock()
        blockNumber = block.blockNumber()
        top = int(self.blockBoundingGeometry(block).translated(self.contentOffset()).top())
        bottom = top + int(self.blockBoundingRect(block).height())
        # font_height = self.fontMetrics().height()




        while block.isValid() and top <= event.rect().bottom():

            if block.isVisible() and bottom >= event.rect().top():
                font_original = self.document().defaultFont()
                size = font_original.pointSize()
                font = painter.font()
                font.setPointSize(size)
                painter.setFont(font)

                number = str(blockNumber + 1)
                painter.setPen(Qt.black)
                painter.drawText(0, top, self.lineNumberArea.width(),
                                 self.fontMetrics().height(),
                                 Qt.AlignRight, number)

            block = block.next()
            top = bottom
            bottom = top + int(self.blockBoundingRect(block).height())
            blockNumber += 1
示例#29
0
    def drawString(self, content, fontSize=256, color=QColor("red")):
        icon = self.icon()

        pixmap = icon.pixmap(512, 512)
        pixSize = pixmap.rect()

        painter = QPainter(pixmap)

        font = painter.font()
        font.setPixelSize(fontSize)
        painter.setFont(font)

        path = QPainterPath()
        path.addText(0, 0, font, content)
        pathBBox = path.boundingRect()

        xOffset = (pixSize.width() - pathBBox.width()) / 2 - pathBBox.left()
        yOffset = (pixSize.height() + pathBBox.height()) / 2

        path.translate(xOffset, yOffset)

        ## paint shadow
        pathPen = QPen(QColor(0, 0, 0, 200))
        pathPen.setWidth(180)
        painter.strokePath(path, pathPen)
        painter.fillPath(path, QBrush(color))

        ## make number bolder
        pathPen = QPen(color)
        pathPen.setWidth(20)
        painter.strokePath(path, pathPen)

        painter.end()

        self.setIcon(QIcon(pixmap))
示例#30
0
 def paintEvent(self, event):
     painter = QPainter(self)
     font = painter.font()
     font.setPointSize(self.width() / 6.0)
     painter.setFont(font)
     painter.drawText(self.rect(), Qt.AlignCenter | Qt.AlignVCenter,
                      str(self.value()))
     QDial.paintEvent(self, event)
示例#31
0
 def paintEvent(self, ev) -> None:
     if self._text is not None:
         painter = QPainter(self)
         font = painter.font()
         fm = QFontMetrics(font)
         width = fm.width(self._text)
         painter.drawText(self.width() // 2 - width // 2, 14, self._text)
         painter.end()
示例#32
0
 def paintEvent(self, ev) -> None:
     if self._text is not None:
         painter = QPainter(self)
         font = painter.font()
         fm = QFontMetrics(font)
         width = fm.width(self._text)
         painter.drawText(self.width() // 2 - width // 2, 14, self._text)
         painter.end()
示例#33
0
 def paintEvent(self, e):
     p = QPainter(self)
     p.setPen(p.pen())
     p.setFont(p.font())
     p.drawText(
         QPointF(self.x,
                 (self.height() + self.fontMetrics().height()) / 2) +
         QPoint(2, -4), self.text_)
示例#34
0
    def paintTab(self, painter: QPainter, index: int):
        if not self.isValidIndex(index):
            return
        painter.save()

        tab = self._tabs[index]
        rect = self._tabRect(index)
        selected = index == self._currentIndex
        enabled = self._enabled and tab.enabled

        if selected:
            painter.fillRect(rect, FancyToolButtonSelectedColor)

        tabText = tab.text
        tabTextRect = QRect(rect)
        drawIcon = rect.height() > 36
        tabIconRect = QRect(rect)

        tabTextRect.translate(0, -2 if drawIcon else 1)
        boldFont = QFont(painter.font())
        boldFont.setPointSizeF(SIDEBAR_FONT_SIZE)
        boldFont.setBold(True)
        painter.setFont(boldFont)
        #painter.setPen(QColor(255, 255, 255, 160) if selected else QColor(0, 0, 0, 110))
        textFlags = Qt.AlignCenter | (Qt.AlignBottom if drawIcon else
                                      Qt.AlignVCenter) | Qt.TextWordWrap

        fader = tab.fader
        if fader > 0 and not selected and enabled:
            painter.save()
            painter.setOpacity(fader)
            painter.fillRect(rect, FancyToolButtonHoverColor)
            painter.restore()

        if not enabled:
            painter.setOpacity(0.7)

        if drawIcon:
            textHeight = (painter.fontMetrics().boundingRect(
                QRect(0, 0, self.width(), self.height()), Qt.TextWordWrap,
                tabText).height())
            tabIconRect.adjust(0, 4, 0, -textHeight - 4)
            iconMode = (QIcon.Active if selected else
                        QIcon.Normal) if enabled else QIcon.Disabled
            iconRect = QRect(0, 0, MODEBAR_ICON_SIZE, MODEBAR_ICON_SIZE)
            iconRect.moveCenter(tabIconRect.center())
            iconRect = iconRect.intersected(tabIconRect)
            drawIconWithShadow(tab.icon, iconRect, painter, iconMode)

        if enabled:
            penColor = FancyTabWidgetEnabledSelectedTextColor if selected else FancyTabWidgetEnabledUnselectedTextColor
        else:
            penColor = FancyTabWidgetDisabledSelectedTextColor if selected else FancyTabWidgetDisabledUnselectedTextColor
        painter.setPen(penColor)
        painter.translate(0, -1)
        painter.drawText(tabTextRect, textFlags, tabText)

        painter.restore()
    def paintEvent(self, event):
        super().paintEvent(event)

        if self.hint:
            painter = QPainter(self.viewport())
            hintText = QApplication.translate("EnhancedTreeView", "The list "
                    "must contain at least one protection from type\nfence and "
                    "from type tree shelter to complete a calculation!")

            fontMetrics = QFontMetrics(painter.font())
            textWidth = fontMetrics.width(hintText)
            topPosition = self.rect().height() / 2 - 16
            leftPosition = self.rect().width() / 2 - textWidth / 4 - 40

            painter.drawImage(leftPosition, topPosition, QImage(os.path.join(self._OXYGEN_PATH_32, "dialog-warning.png")))
            painter.setPen(QPen(QColor(0, 0, 0)))
            painter.drawText(self.rect(), Qt.AlignCenter, hintText)
示例#36
0
    def paintEvent(self, event):
        painter = QPainter(self)
        if self.isEnabled() and not self.isDown() and not self.isChecked():
            painter.save()
            hover_color = QColor("#424242")
            faded_hover_color = QColor(hover_color)
            faded_hover_color.setAlpha(int(self._fader * hover_color.alpha()))
            painter.fillRect(event.rect(), faded_hover_color)
            painter.restore()
        elif self.isDown() or self.isChecked():
            painter.save()
            selected_color = QColor("#161719")
            painter.fillRect(event.rect(), selected_color)
            painter.restore()

        is_titled = bool(self.defaultAction().property("titled"))
        icon_rect = QRect(0, 0, 32, 32)
        icon_rect.moveCenter(event.rect().center())

        if is_titled:
            font = painter.font()
            center_rect = event.rect()
            font.setPointSizeF(6)
            fm = QFontMetrics(font)
            line_height = fm.height()
            text_flags = Qt.AlignHCenter | Qt.AlignTop
            project_name = self.defaultAction().property("heading")
            if project_name is not None:
                center_rect.adjust(0, line_height, 0, 0)
                icon_rect.moveTop(center_rect.top())
            else:
                icon_rect.moveCenter(center_rect.center())
            self.icon().paint(painter, icon_rect, Qt.AlignCenter)
            painter.setFont(font)
            r = QRect(0, 5, self.rect().width(), line_height)
            painter.setPen(Qt.white)
            margin = 5
            available_width = r.width() - margin
            ellided_project_name = fm.elidedText(
                project_name, Qt.ElideMiddle, available_width)
            painter.drawText(r, text_flags, ellided_project_name)
        else:
            self.icon().paint(painter, icon_rect, Qt.AlignCenter)
示例#37
0
    def paintEvent(self, event):
        """This method draws a left sidebar

        :param event: QEvent
        """

        bottom = self.editor.viewport().height()
        font_metrics = QFontMetrics(self.editor.document().defaultFont())
        current_line = self.editor.document().findBlock(
            self.editor.textCursor().position()).blockNumber() + 1
        painter = QPainter(self)
        painter.fillRect(1, 1, self.width(),
                         self.height() - 2, QColor("#e8e8e8"))
        block = self.editor.firstVisibleBlock()
        vpoffset = self.editor.contentOffset()
        line = block.blockNumber()
        painter.setFont(self.editor.document().defaultFont())

        while block.isValid():
            line += 1
            pos = self.editor.blockBoundingGeometry(block).topLeft() + vpoffset
            if pos.y() > bottom:
                break

            # Text bold
            font = painter.font()
            if current_line == line:
                font.setBold(True)
            else:
                font.setBold(False)
            painter.setFont(font)

            if block.isVisible():
                painter.setPen(QColor("#9A9A9A"))
                fm_ascent = font_metrics.ascent()
                fm_descent = font_metrics.descent()
                painter.drawText(self.width() -
                                 font_metrics.width(str(line)) - 3,
                                 pos.y() + fm_ascent + fm_descent, str(line))

            block = block.next()
        painter.end()
        QFrame.paintEvent(self, event)
示例#38
0
文件: thumbview.py 项目: dushko/G-
    def drawThumnail(self, cellNum, pic, thumb : PhotoNode, cell : Rectangle, painter : QPainter):
        rect = QRect(cell.x, cell.y, cell.width, cell.height)
        bLeft = rect.bottomLeft()

        # draw name
        fontHeight = 20
        font = painter.font()
        font.setPixelSize(fontHeight)
        textTopRight = QPoint(bLeft.x(), bLeft.y() - fontHeight)
        textRect = QRect(textTopRight, rect.bottomRight())
        thumbName = thumb.name
        painter.drawText(textRect, Qt.AlignHCenter, thumbName)
        #painter.drawRect(rect)

        # draw thumb
        imageRect = QRect(rect.topLeft(), textRect.topRight())
        imageCenter = imageRect.center()
        imageX = int(imageCenter.x() - pic.width() / 2)
        imageY = int(imageCenter.y() - pic.height() / 2)
        imageOrigin = QPoint(imageX, imageY)
        painter.drawPixmap(imageOrigin, pic)
示例#39
0
    def paintEvent(self, event):
        page_bottom = self.edit.viewport().height()
        font_metrics = QFontMetrics(self.edit.document().defaultFont())
        current_block = self.edit.document().findBlock(
            self.edit.textCursor().position())
        pattern = self.pat if self.edit.lang == "python" else self.patNotPython

        painter = QPainter(self)
        background = resources.CUSTOM_SCHEME.get('sidebar-background',
            resources.COLOR_SCHEME['sidebar-background'])
        foreground = resources.CUSTOM_SCHEME.get('sidebar-foreground',
            resources.COLOR_SCHEME['sidebar-foreground'])
        pep8color = resources.CUSTOM_SCHEME.get('pep8-underline',
            resources.COLOR_SCHEME['pep8-underline'])
        errorcolor = resources.CUSTOM_SCHEME.get('error-underline',
            resources.COLOR_SCHEME['error-underline'])
        migrationcolor = resources.CUSTOM_SCHEME.get('migration-underline',
            resources.COLOR_SCHEME['migration-underline'])
        painter.fillRect(self.rect(), QColor(background))

        block = self.edit.firstVisibleBlock()
        viewport_offset = self.edit.contentOffset()
        line_count = block.blockNumber()
        painter.setFont(self.edit.document().defaultFont())
        while block.isValid():
            line_count += 1
            # The top left position of the block in the document
            position = self.edit.blockBoundingGeometry(block).topLeft() + \
                viewport_offset
            # Check if the position of the block is outside of the visible area
            if position.y() > page_bottom:
                break

            # Set the Painter Pen depending on special lines
            error = False
            if settings.CHECK_STYLE and \
               ((line_count - 1) in self._pep8Lines):
                painter.setPen(QColor(pep8color))
                font = painter.font()
                font.setItalic(True)
                font.setUnderline(True)
                painter.setFont(font)
                error = True
            elif settings.FIND_ERRORS and \
                 ((line_count - 1) in self._errorsLines):
                painter.setPen(QColor(errorcolor))
                font = painter.font()
                font.setItalic(True)
                font.setUnderline(True)
                painter.setFont(font)
                error = True
            elif settings.SHOW_MIGRATION_TIPS and \
                 ((line_count - 1) in self._migrationLines):
                painter.setPen(QColor(migrationcolor))
                font = painter.font()
                font.setItalic(True)
                font.setUnderline(True)
                painter.setFont(font)
                error = True
            else:
                painter.setPen(QColor(foreground))

            # We want the line number for the selected line to be bold.
            bold = False
            if block == current_block:
                bold = True
                font = painter.font()
                font.setBold(True)
                painter.setFont(font)

            # Draw the line number right justified at the y position of the
            # line. 3 is a magic padding number. drawText(x, y, text).
            if block.isVisible():
                painter.drawText(self.width() - self.foldArea -
                    font_metrics.width(str(line_count)) - 3,
                    round(position.y()) + font_metrics.ascent() +
                    font_metrics.descent() - 1,
                    str(line_count))

            # Remove the bold style if it was set previously.
            if bold:
                font = painter.font()
                font.setBold(False)
                painter.setFont(font)
            if error:
                font = painter.font()
                font.setItalic(False)
                font.setUnderline(False)
                painter.setFont(font)

            block = block.next()

        self.highest_line = line_count

        #Code Folding
        xofs = self.width() - self.foldArea
        painter.fillRect(xofs, 0, self.foldArea, self.height(),
                QColor(resources.CUSTOM_SCHEME.get('fold-area',
                resources.COLOR_SCHEME['fold-area'])))
        if self.foldArea != self.rightArrowIcon.width():
            polygon = QPolygonF()

            self.rightArrowIcon = QPixmap(self.foldArea, self.foldArea)
            self.rightArrowIcon.fill(Qt.transparent)
            self.downArrowIcon = QPixmap(self.foldArea, self.foldArea)
            self.downArrowIcon.fill(Qt.transparent)

            polygon.append(QPointF(self.foldArea * 0.4, self.foldArea * 0.25))
            polygon.append(QPointF(self.foldArea * 0.4, self.foldArea * 0.75))
            polygon.append(QPointF(self.foldArea * 0.8, self.foldArea * 0.5))
            iconPainter = QPainter(self.rightArrowIcon)
            iconPainter.setRenderHint(QPainter.Antialiasing)
            iconPainter.setPen(Qt.NoPen)
            iconPainter.setBrush(QColor(
                resources.CUSTOM_SCHEME.get('fold-arrow',
                resources.COLOR_SCHEME['fold-arrow'])))
            iconPainter.drawPolygon(polygon)

            polygon.clear()
            polygon.append(QPointF(self.foldArea * 0.25, self.foldArea * 0.4))
            polygon.append(QPointF(self.foldArea * 0.75, self.foldArea * 0.4))
            polygon.append(QPointF(self.foldArea * 0.5, self.foldArea * 0.8))
            iconPainter = QPainter(self.downArrowIcon)
            iconPainter.setRenderHint(QPainter.Antialiasing)
            iconPainter.setPen(Qt.NoPen)
            iconPainter.setBrush(QColor(
                resources.CUSTOM_SCHEME.get('fold-arrow',
                resources.COLOR_SCHEME['fold-arrow'])))
            iconPainter.drawPolygon(polygon)

        block = self.edit.firstVisibleBlock()
        while block.isValid():
            position = self.edit.blockBoundingGeometry(
                block).topLeft() + viewport_offset
            #Check if the position of the block is outside of the visible area
            if position.y() > page_bottom:
                break

            if pattern.match(block.text()) and block.isVisible():
                if block.blockNumber() in self._foldedBlocks:
                    painter.drawPixmap(xofs, round(position.y()),
                        self.rightArrowIcon)
                else:
                    painter.drawPixmap(xofs, round(position.y()),
                        self.downArrowIcon)
            #Add Bookmarks and Breakpoint
            elif block.blockNumber() in self._breakpoints:
                linear_gradient = QLinearGradient(
                    xofs, round(position.y()),
                    xofs + self.foldArea, round(position.y()) + self.foldArea)
                linear_gradient.setColorAt(0, QColor(255, 11, 11))
                linear_gradient.setColorAt(1, QColor(147, 9, 9))
                painter.setRenderHints(QPainter.Antialiasing, True)
                painter.setPen(Qt.NoPen)
                painter.setBrush(QBrush(linear_gradient))
                painter.drawEllipse(
                    xofs + 1,
                    round(position.y()) + 6,
                    self.foldArea - 1, self.foldArea - 1)
            elif block.blockNumber() in self._bookmarks:
                linear_gradient = QLinearGradient(
                    xofs, round(position.y()),
                    xofs + self.foldArea, round(position.y()) + self.foldArea)
                linear_gradient.setColorAt(0, QColor(13, 62, 243))
                linear_gradient.setColorAt(1, QColor(5, 27, 106))
                painter.setRenderHints(QPainter.Antialiasing, True)
                painter.setPen(Qt.NoPen)
                painter.setBrush(QBrush(linear_gradient))
                painter.drawRoundedRect(
                    xofs + 1,
                    round(position.y()) + 6,
                    self.foldArea - 2, self.foldArea - 1,
                    3, 3)

            block = block.next()# block = next(block)

        painter.end()
        super(SidebarWidget, self).paintEvent(event)
示例#40
0
文件: test.py 项目: fqez/sandbox
	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)

		angle_step = 360 / self.n_states

		painter.save()
		painter.translate(self.dist_center.x(), self.dist_center.y())

		#painter.drawRect(- self.dist_radius, - self.dist_radius, self.dist_radius *2,self.dist_radius*2)
		#painter.drawEllipse(QPoint(0, 0), self.dist_radius , self.dist_radius)
		painter.rotate(-180)	#to start painting from the left side of the circle
		x = self.dist_radius * math.cos(0)
		y = self.dist_radius * math.sin(0)

		for h in range(self.n_states):

			rot = angle_step * h

			painter.save()
			painter.rotate(rot)
			painter.translate(x,y)

			if self.machine.getState(h).isActive():
				painter.setBrush(self.greenGradientBrush)			
			painter.drawEllipse(QPoint(0,0), self.state_radius, self.state_radius)
			#global position of transformed coordinates
			gx = painter.worldTransform().map(QPoint(0,0)).x()
			gy = painter.worldTransform().map(QPoint(0,0)).y()
			self.machine.getState(h).setPos(gx, gy)

			# text transformation
			painter.save()
			painter.rotate(180)
			painter.rotate(-rot)
			font = painter.font();
			font.setPixelSize(self.state_radius*.4);
			painter.setFont(font);
			rect = QRect(-self.state_radius, -self.state_radius, self.state_radius*2, self.state_radius*2)
			painter.drawText(rect, Qt.AlignCenter, self.machine.getState(h).getName());
			painter.restore()
			#end text transformation


			painter.restore()			
			
		painter.restore()

		
		#drawing transitions.
		painter.save()
		pptv = QTransform()
		pptv.translate(0, self.height())
		pptv.rotate(-180, Qt.XAxis)
		painter.setTransform(pptv)
		s = self.machine.getStates()
		for j in s:
			t = j.getTransitions()
			for i in t:
				#get the points in the canvas
				init = QPoint(j.getPos()[0], j.getPos()[1])
				end = QPoint(self.machine.getState(i.getStateEnd()).getPos()[0], self.machine.getState(i.getStateEnd()).getPos()[1])
				# get the transformed ponts
				init2 = QPoint(painter.worldTransform().map(init))
				end2 = QPoint(painter.worldTransform().map(end))

				#get the angle between states centers
				angle = math.atan2(end2.y() - init2.y(), end2.x() - init2.x())

				#get the coordinates of the starting point of the transition (it starts in the bound, not in the center)
				newX = self.state_radius * math.cos(angle) + init2.x()
				newY = self.state_radius * math.sin(angle) + init2.y()
				init2.setX(newX)
				init2.setY(newY)

				#same for the end of the transition
				angle2 = math.atan2(init2.y() - end2.y(), init2.x() - end2.x())
				newX2 = self.state_radius * math.cos(angle2) + end2.x()
				newY2 = self.state_radius * math.sin(angle2) + end2.y()
				end2.setX(newX2)
				end2.setY(newY2)

				#painter.drawLine(init, end)
				painter.drawLine(init2, end2)
				init = QPoint(painter.worldTransform().map(init2))
				end = QPoint(painter.worldTransform().map(end2))
				i.setOrig(init.x(), init.y())
				i.setDest(end.x(), end.y())	
				i.setAngle(angle)
				#painter.draw
		painter.restore()

		painter.setPen(QPen(QColor(Qt.gray), 3))
		for i in machine.getStates():
			for j in i.getTransitions():
				i = QPoint(j.getOrig()[0], j.getOrig()[1])
				o = QPoint(j.getDest()[0], j.getDest()[1])			
				painter.drawPolyline(i, o)

				painter.save()
				painter.setPen(QPen(QColor(Qt.gray), 2))
				painter.translate(j.getDest()[0],j.getDest()[1])
				painter.rotate(90 - j.getAngle()*180/math.pi)
				a = QPoint(0,0)
				b = QPoint(-5,10)
				c = QPoint(5,10)

				a1 = painter.worldTransform().map(a)
				b1 = painter.worldTransform().map(b)
				c1 = painter.worldTransform().map(c)
				pointer = QPolygon([a,b,c])
				painter.drawPolygon(pointer)
				painter.restore()

				painter.save()
				if j.isActive():

					t = self.machine.getTransition(self.t_active)
					init = QPoint(t.getOrig()[0], t.getOrig()[1])
					end = QPoint(t.getDest()[0], t.getDest()[1])
					
					painter.setPen(QPen(QColor(Qt.green), 3))
					painter.drawPolyline(init, end)
					
					
					painter.setPen(QPen(QColor(Qt.gray), 3))
					painter.drawPolyline(self.poly(self.pts))

					painter.setBrush(QBrush(QColor(255, 0, 0)))
					painter.setPen(QPen(QColor(Qt.red), 2))
					pointer = QPolygon([a1,b1,c1])
					painter.drawPolygon(pointer)

					painter.setBrush(QBrush(QColor(255, 0, 0)))
					painter.setPen(QPen(QColor(Qt.black), 1))
				painter.restore()

					
					#Ball that follows the line
					#for x, y in self.pts:
						#painter.drawEllipse(QRectF(x - 4, y - 4, 8, 8))

				painter.save()
				pptv = QTransform()
				painter.setPen(QPen(QColor(Qt.black), 3))
				middleX = (j.getOrig()[0] + j.getDest()[0]) /2
				middleY = (j.getOrig()[1] + j.getDest()[1]) /2
				pptv.translate(middleX, middleY)
				#pptv.rotate(-j.getAngle()*180/math.pi)
				painter.setTransform(pptv)
				font = painter.font();
				font.setPixelSize(self.state_radius*.3);
				painter.setFont(font);
				rect = QRect(-self.state_radius, -self.state_radius, self.state_radius*2, self.state_radius*2)
				name = str(j.getId())+ '. ' + j.getName()
				painter.drawText(rect, Qt.AlignCenter, name)
				painter.restore()


  
		painter.setPen(self.palette().dark().color())
		painter.setBrush(Qt.NoBrush)
		painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1))
示例#41
0
文件: gui.py 项目: fqez/sandbox
	def paintEvent(self, event):
		  
		painter = QPainter(self)
		painter.setPen(self.pen)
		painter.setBrush(self.brush)
		if self.antialiased:
			painter.setRenderHint(QPainter.Antialiasing)

		angle_step = 360 / self.n_states

		painter.save()	#Save_1. Save the state of the system (push matrix)
		painter.translate(self.dist_center.x(), self.dist_center.y())		# go to the center of the render area
		painter.rotate(-180)	#to start painting from the left side of the circle (clockwise)

		#center of the circumference where through we are going to paint our states 
		x = self.dist_radius * math.cos(0)	
		y = self.dist_radius * math.sin(0)


		for h in range(self.n_states):

			rot = angle_step * h 	# each state is equidistant from the others. We paint them in circles

			painter.save()			#Save_2
			painter.rotate(rot)		#now our system is pointing to the next state to be drawn
			painter.translate(x,y)	#now our origin is in the center of the next state to be drawn

			#if the state is active, fill it green
			if self.machine.getState(h).isActive():	
				painter.setBrush(self.greenGradientBrush)			
			painter.drawEllipse(QPoint(0,0), self.state_radius, self.state_radius)	#draw the new state

			#global position of transformed coordinates (before any transformation, origin at top-left corner)
			gx = painter.worldTransform().map(QPoint(0,0)).x()
			gy = painter.worldTransform().map(QPoint(0,0)).y()
			self.machine.getState(h).setPos(gx, gy)		#store the center of the state without any transformation applied

			# text transformation. Our origin is still in the center of the current state
			painter.save()			#Save_3
			painter.rotate(180)		#making the text go vertical
			painter.rotate(-rot)	#undoing the rotation made for painting the state. No the text is horizontal
			font = painter.font();
			font.setPixelSize(self.state_radius*.4);
			painter.setFont(font);
			rect = QRect(-self.state_radius, -self.state_radius, self.state_radius*2, self.state_radius*2)
			painter.drawText(rect, Qt.AlignCenter, self.machine.getState(h).getName());
			painter.restore()	#Restore_3
			#end text transformation

			painter.restore()	#Restore_2
			
		painter.restore()	#Restore_1. Restore the state of the system (pop matrix)

		
		#drawing transitions. Line between states
		painter.save()	# Save_4
		pptv = QTransform()		#Define a new transformation. Needed to rotate the system along other axis than Z
		pptv.translate(0, self.height())	#We are now at the bottom-left corner of the screen
		pptv.rotate(-180, Qt.XAxis)			#Rotate along the X-axis so now we are in a typical cartesian system.
		painter.setTransform(pptv)			#Apply the transformation
		states = self.machine.getStates()
		for state in states:
			transitions = state.getTransitions()
			for transition in transitions:
				#get the center of the origin and destination states in our current system state
				orig = QPoint(state.getPos()[0], state.getPos()[1])
				end = QPoint(self.machine.getState(transition.getStateEnd()).getPos()[0], self.machine.getState(transition.getStateEnd()).getPos()[1])
				# get those coordinates without transformation
				orig2 = QPoint(painter.worldTransform().map(orig))
				end2 = QPoint(painter.worldTransform().map(end))

				#get the angle between states centers and the horizon
				angle = math.atan2(end2.y() - orig2.y(), end2.x() - orig2.x())

				#get the coordinates of the starting point of the transition (it starts in the bound of the state, not in the center)
				newX = self.state_radius * math.cos(angle) + orig2.x()
				newY = self.state_radius * math.sin(angle) + orig2.y()
				#now the transition starts at the border, not in the center
				orig2.setX(newX)
				orig2.setY(newY)

				#same for the destination state
				angle2 = math.atan2(orig2.y() - end2.y(), orig2.x() - end2.x())
				newX2 = self.state_radius * math.cos(angle2) + end2.x()
				newY2 = self.state_radius * math.sin(angle2) + end2.y()
				end2.setX(newX2)
				end2.setY(newY2)

				#draw the line between the origin and destination states
				painter.drawLine(orig2, end2)
				#get the start and the end of the transition untransformed
				init = QPoint(painter.worldTransform().map(orig2))
				end = QPoint(painter.worldTransform().map(end2))
				#store that info
				transition.setOrig(init.x(), init.y())
				transition.setDest(end.x(), end.y())	
				transition.setAngle(angle)
		painter.restore() #Restore_4


		#Appliying style to the transitions
		painter.setPen(QPen(QColor(Qt.gray), 3))
		for state in self.machine.getStates():
			for transition in state.getTransitions():
				#get the start and end coordinates of the transition
				i = QPoint(transition.getOrig()[0], transition.getOrig()[1])
				o = QPoint(transition.getDest()[0], transition.getDest()[1])			
				painter.drawPolyline(i, o)

				#Drawing the arrow at the end of the transition
				painter.save()	#Save_5
				painter.setPen(QPen(QColor(Qt.gray), 2))
				painter.translate(transition.getDest()[0],transition.getDest()[1])	#Go to the end of the transition
				painter.rotate(90 - transition.getAngle()*180/math.pi)		#Rotate to point in the direction of the transition

				#coordinates of the arrow (triangle)
				a = QPoint(0,0)
				b = QPoint(-5,10)
				c = QPoint(5,10)

				#coordinates of the arrow untransformed
				a1 = painter.worldTransform().map(a)
				b1 = painter.worldTransform().map(b)
				c1 = painter.worldTransform().map(c)

				#Drawin the actual arrow
				pointer = QPolygon([a,b,c])
				painter.drawPolygon(pointer)
				painter.restore()	#Restore_5

				#For the animation of the transition
				painter.save()	#Save_6
				if transition.isActive():	#if the current transition is the active one the wave function will be running, so it's updating the canvas

					painter.setPen(QPen(QColor(Qt.green), 3))
					painter.drawPolyline(i,o)
					
					painter.setPen(QPen(QColor(Qt.gray), 3))
					painter.drawPolyline(self.poly(self.pts))

					#Draw the arrow in the active state (red arrow)
					painter.setBrush(QBrush(QColor(255, 0, 0)))
					painter.setPen(QPen(QColor(Qt.red), 2))
					pointer = QPolygon([a1,b1,c1])
					painter.drawPolygon(pointer)
					
					#Ball that follows the line animation
					for x, y in self.pts:
						painter.drawEllipse(QRectF(self.pts[0][0] - 4, self.pts[0][1] - 4, 8, 8))
				painter.restore()	#Restore_6

				#Painting the text of the transition
				painter.save()	#Save_7
				pptv = QTransform()
				painter.setPen(QPen(QColor(Qt.black), 3))
				#get the middle point of the transition
				middleX = (transition.getOrig()[0] + transition.getDest()[0]) /2	
				middleY = (transition.getOrig()[1] + transition.getDest()[1]) /2
				pptv.translate(middleX, middleY)	#translate to that point
				painter.setTransform(pptv)			#apply the transformation
				font = painter.font();
				font.setPixelSize(self.state_radius*.2);
				painter.setFont(font);
				rect = QRect(-self.state_radius, -self.state_radius, self.state_radius*2, self.state_radius*2)
				name = str(transition.getId())+ '. ' + transition.getName()
				painter.drawText(rect, Qt.AlignCenter, name)
				painter.restore()	#Restore_7


  
		#paint the actual canvas
		painter.setPen(self.palette().dark().color())
		painter.setBrush(Qt.NoBrush)
		painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1))