Beispiel #1
0
 def paintEvent(self, ev):
     shown = self.button.isChecked()
     ls = self.fm.lineSpacing()
     painter = QPainter(self)
     if self.mouse_over:
         tool = QStyleOption()
         tool.rect = self.rect()
         tool.state = QStyle.State_Raised | QStyle.State_Active | QStyle.State_MouseOver
         s = self.style()
         s.drawPrimitive(QStyle.PE_PanelButtonTool, tool, painter, self)
     painter.drawText(
         0, 0,
         self.width(),
         ls, Qt.AlignCenter | Qt.TextSingleLine, self.text)
     text = _('Hide') if shown else _('Show')
     f = self.font()
     f.setBold(True)
     painter.setFont(f)
     painter.drawText(
         0, self.height() - ls,
         self.width(),
         ls, Qt.AlignCenter | Qt.TextSingleLine, text)
     x = (self.width() - ICON_SZ) // 2
     y = ls + (self.height() - ICON_SZ - 2 * ls) // 2
     pmap = self.bright_icon if shown else self.dull_icon
     painter.drawPixmap(x, y, pmap)
     painter.end()
Beispiel #2
0
 def paintEvent(self, event):
     QWidget.paintEvent(self, event)
     pmap = self._pixmap
     if pmap.isNull():
         return
     w, h = pmap.width(), pmap.height()
     ow, oh = w, h
     cw, ch = self.rect().width(), self.rect().height()
     scaled, nw, nh = fit_image(w, h, cw, ch)
     if scaled:
         pmap = pmap.scaled(int(nw*pmap.devicePixelRatio()), int(nh*pmap.devicePixelRatio()), Qt.IgnoreAspectRatio,
                 Qt.SmoothTransformation)
     w, h = int(pmap.width()/pmap.devicePixelRatio()), int(pmap.height()/pmap.devicePixelRatio())
     x = int(abs(cw - w)/2.)
     y = int(abs(ch - h)/2.)
     target = QRect(x, y, w, h)
     p = QPainter(self)
     p.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
     p.drawPixmap(target, pmap)
     if self.draw_border:
         pen = QPen()
         pen.setWidth(self.BORDER_WIDTH)
         p.setPen(pen)
         p.drawRect(target)
     if self.show_size:
         draw_size(p, target, ow, oh)
     p.end()
Beispiel #3
0
 def paintEvent(self, e):
     if self.img:
         painter = QPainter()
         painter.begin(self)
         painter.scale(self.scale, self.scale)
         painter.drawPixmap(self.point, self.img)
         painter.end()
Beispiel #4
0
 def paintEvent(self, event):
     if self.pixmap.isNull():
         return
     canvas_size = self.rect()
     width = self.current_pixmap_size.width()
     extrax = canvas_size.width() - width
     if extrax < 0:
         extrax = 0
     x = int(extrax / 2.)
     height = self.current_pixmap_size.height()
     extray = canvas_size.height() - height
     if extray < 0:
         extray = 0
     y = int(extray / 2.)
     target = QRect(x, y, min(canvas_size.width(), width),
                    min(canvas_size.height(), height))
     p = QPainter(self)
     p.setRenderHints(QPainter.RenderHint.Antialiasing
                      | QPainter.RenderHint.SmoothPixmapTransform)
     p.drawPixmap(
         target,
         self.pixmap.scaled(target.size(),
                            Qt.AspectRatioMode.KeepAspectRatio,
                            Qt.TransformationMode.SmoothTransformation))
     p.end()
Beispiel #5
0
    def paintEvent(self, event):
        pmap = self.blank if self.pixmap is None or self.pixmap.isNull(
        ) else self.pixmap
        target = self.rect()
        scaled, width, height = fit_image(pmap.width(), pmap.height(),
                                          target.width(), target.height())
        target.setRect(target.x(), target.y(), width, height)
        p = QPainter(self)
        p.setRenderHints(QPainter.Antialiasing
                         | QPainter.SmoothPixmapTransform)
        p.drawPixmap(target, pmap)

        if self.pixmap is not None and not self.pixmap.isNull():
            sztgt = target.adjusted(0, 0, 0, -4)
            f = p.font()
            f.setBold(True)
            p.setFont(f)
            sz = u'\u00a0%d x %d\u00a0' % (self.pixmap.width(),
                                           self.pixmap.height())
            flags = Qt.AlignBottom | Qt.AlignRight | Qt.TextSingleLine
            szrect = p.boundingRect(sztgt, flags, sz)
            p.fillRect(szrect.adjusted(0, 0, 0, 4), QColor(0, 0, 0, 200))
            p.setPen(QPen(QColor(255, 255, 255)))
            p.drawText(sztgt, flags, sz)
        p.end()
Beispiel #6
0
 def paintEvent(self, event):
     canvas_size = self.rect()
     width = self.current_pixmap_size.width()
     extrax = canvas_size.width() - width
     if extrax < 0:
         extrax = 0
     x = int(extrax/2.)
     height = self.current_pixmap_size.height()
     extray = canvas_size.height() - height
     if extray < 0:
         extray = 0
     y = int(extray/2.)
     target = QRect(x, y, width, height)
     p = QPainter(self)
     p.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
     try:
         dpr = self.devicePixelRatioF()
     except AttributeError:
         dpr = self.devicePixelRatio()
     spmap = self.pixmap.scaled(target.size() * dpr, Qt.KeepAspectRatio, Qt.SmoothTransformation)
     spmap.setDevicePixelRatio(dpr)
     p.drawPixmap(target, spmap)
     if gprefs['bd_overlay_cover_size']:
         sztgt = target.adjusted(0, 0, 0, -4)
         f = p.font()
         f.setBold(True)
         p.setFont(f)
         sz = u'\u00a0%d x %d\u00a0'%(self.pixmap.width(), self.pixmap.height())
         flags = Qt.AlignBottom|Qt.AlignRight|Qt.TextSingleLine
         szrect = p.boundingRect(sztgt, flags, sz)
         p.fillRect(szrect.adjusted(0, 0, 0, 4), QColor(0, 0, 0, 200))
         p.setPen(QPen(QColor(255,255,255)))
         p.drawText(sztgt, flags, sz)
     p.end()
Beispiel #7
0
 def paintEvent(self, ev):
     shown = self.button.isChecked()
     ls = self.fm.lineSpacing()
     painter = QPainter(self)
     if self.mouse_over:
         tool = QStyleOption()
         tool.rect = self.rect()
         tool.state = QStyle.StateFlag.State_Raised | QStyle.StateFlag.State_Active | QStyle.StateFlag.State_MouseOver
         s = self.style()
         s.drawPrimitive(QStyle.PrimitiveElement.PE_PanelButtonTool, tool, painter, self)
     painter.drawText(
         0, 0,
         self.width(),
         ls, Qt.AlignmentFlag.AlignCenter | Qt.TextFlag.TextSingleLine, self.text)
     text = _('Hide') if shown else _('Show')
     f = self.font()
     f.setBold(True)
     painter.setFont(f)
     painter.drawText(
         0, self.height() - ls,
         self.width(),
         ls, Qt.AlignmentFlag.AlignCenter | Qt.TextFlag.TextSingleLine, text)
     x = (self.width() - ICON_SZ) // 2
     y = ls + (self.height() - ICON_SZ - 2 * ls) // 2
     pmap = self.bright_icon if shown else self.dull_icon
     painter.drawPixmap(x, y, pmap)
     painter.end()
Beispiel #8
0
 def render_emblems(item, emblems):
     emblems = tuple(emblems)
     if not emblems:
         return
     icon = self.rendered_emblem_cache.get(emblems, None)
     if icon is None:
         pixmaps = []
         for emblem in emblems:
             pm = self.emblem_cache.get(emblem, None)
             if pm is None:
                 pm = self.emblem_cache[emblem] = QIcon(I(emblem)).pixmap(self.iconSize())
             pixmaps.append(pm)
         num = len(pixmaps)
         w, h = pixmaps[0].width(), pixmaps[0].height()
         if num == 1:
             icon = self.rendered_emblem_cache[emblems] = QIcon(pixmaps[0])
         else:
             canvas = QPixmap((num * w) + ((num-1)*2), h)
             canvas.setDevicePixelRatio(pixmaps[0].devicePixelRatio())
             canvas.fill(Qt.transparent)
             painter = QPainter(canvas)
             for i, pm in enumerate(pixmaps):
                 painter.drawPixmap(int(i * (w + 2)/canvas.devicePixelRatio()), 0, pm)
             painter.end()
             icon = self.rendered_emblem_cache[emblems] = canvas
     item.setData(0, Qt.DecorationRole, icon)
Beispiel #9
0
 def paintEvent(self, event):
     QWidget.paintEvent(self, event)
     pmap = self._pixmap
     if pmap.isNull():
         return
     w, h = pmap.width(), pmap.height()
     ow, oh = w, h
     cw, ch = self.rect().width(), self.rect().height()
     scaled, nw, nh = fit_image(w, h, cw, ch)
     if scaled:
         pmap = pmap.scaled(int(nw * pmap.devicePixelRatio()),
                            int(nh * pmap.devicePixelRatio()),
                            Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
     w, h = int(pmap.width() / pmap.devicePixelRatio()), int(
         pmap.height() / pmap.devicePixelRatio())
     x = int(abs(cw - w) / 2)
     y = int(abs(ch - h) / 2)
     target = QRect(x, y, w, h)
     p = QPainter(self)
     p.setRenderHints(QPainter.Antialiasing
                      | QPainter.SmoothPixmapTransform)
     p.drawPixmap(target, pmap)
     if self.draw_border:
         pen = QPen()
         pen.setWidth(self.BORDER_WIDTH)
         p.setPen(pen)
         p.drawRect(target)
     if self.show_size:
         draw_size(p, target, ow, oh)
     p.end()
Beispiel #10
0
    def paintEvent(self, event):
        '''
        @param: event QPaintEvent
        '''
        if not self._use_background:
            return

        painter = QPainter(self)

        rect = self._side_widget.rect().adjusted(0, 0, 1, 0)
        rect = self.style().visualRect(self.layoutDirection(), self.geometry(),
                                       rect)
        styleHelper.verticalGradient(painter, rect, rect)

        if not self._background_pixmap.isNull():
            pixmap_rect = QRect(self._background_pixmap.rect())
            pixmap_rect.moveTo(rect.topLeft())

            while pixmap_rect.top() < rect.bottom():
                source_rect = QRect(pixmap_rect.intersected(rect))
                source_rect.moveTo(0, 0)
                painter.drawPixmap(pixmap_rect.topLeft(),
                                   self._background_pixmap, source_rect)
                pixmap_rect.moveTop(pixmap_rect.bottom() - 10)

        painter.setPen(styleHelper.borderColor())
        painter.drawLine(rect.topRight(), rect.bottomRight())

        # QColor
        light = styleHelper.sidebarHighlight()
        painter.setPen(light)
        painter.drawLine(rect.bottomLeft(), rect.bottomRight())
 def paintEvent(self, event):
     painter = QPainter(self)
     painter.drawPixmap(
         self.rect(),
         QPixmap(
             os.path.join(self.__config.diretorio_assets, "menu principal",
                          "fundo.png")))
     super().paintEvent(event)
Beispiel #12
0
    def paintEvent(self, event):
        w = self.viewport().rect().width()
        painter = QPainter(self.viewport())
        painter.setClipRect(event.rect())
        painter.setRenderHint(QPainter.SmoothPixmapTransform, True)
        floor = event.rect().bottom()
        ceiling = event.rect().top()
        fv = self.firstVisibleBlock().blockNumber()
        origin = self.contentOffset()
        doc = self.document()
        lines = []

        for num, text in self.headers:
            top, bot = num, num + 3
            if bot < fv:
                continue
            y_top = self.blockBoundingGeometry(doc.findBlockByNumber(top)).translated(origin).y()
            y_bot = self.blockBoundingGeometry(doc.findBlockByNumber(bot)).translated(origin).y()
            if max(y_top, y_bot) < ceiling:
                continue
            if min(y_top, y_bot) > floor:
                break
            painter.setFont(self.heading_font)
            br = painter.drawText(3, y_top, w, y_bot - y_top - 5, Qt.TextSingleLine, text)
            painter.setPen(QPen(self.palette().text(), 2))
            painter.drawLine(0, br.bottom()+3, w, br.bottom()+3)

        for top, bot, kind in self.changes:
            if bot < fv:
                continue
            y_top = self.blockBoundingGeometry(doc.findBlockByNumber(top)).translated(origin).y()
            y_bot = self.blockBoundingGeometry(doc.findBlockByNumber(bot)).translated(origin).y()
            if max(y_top, y_bot) < ceiling:
                continue
            if min(y_top, y_bot) > floor:
                break
            if y_top != y_bot:
                painter.fillRect(0,  y_top, w, y_bot - y_top, self.diff_backgrounds[kind])
            lines.append((y_top, y_bot, kind))
            if top in self.images:
                img, maxw = self.images[top][:2]
                if bot > top + 1 and not img.isNull():
                    y_top = self.blockBoundingGeometry(doc.findBlockByNumber(top+1)).translated(origin).y() + 3
                    y_bot -= 3
                    scaled, imgw, imgh = fit_image(int(img.width()/img.devicePixelRatio()), int(img.height()/img.devicePixelRatio()), w - 3, y_bot - y_top)
                    painter.drawPixmap(QRect(3, y_top, imgw, imgh), img)

        painter.end()
        PlainTextEdit.paintEvent(self, event)
        painter = QPainter(self.viewport())
        painter.setClipRect(event.rect())
        for top, bottom, kind in sorted(lines, key=lambda t_b_k:{'replace':0}.get(t_b_k[2], 1)):
            painter.setPen(QPen(self.diff_foregrounds[kind], 1))
            painter.drawLine(0, top, w, top)
            painter.drawLine(0, bottom - 1, w, bottom - 1)
Beispiel #13
0
    def paintEvent(self, event):
        w = self.viewport().rect().width()
        painter = QPainter(self.viewport())
        painter.setClipRect(event.rect())
        floor = event.rect().bottom()
        ceiling = event.rect().top()
        fv = self.firstVisibleBlock().blockNumber()
        origin = self.contentOffset()
        doc = self.document()
        lines = []

        for num, text in self.headers:
            top, bot = num, num + 3
            if bot < fv:
                continue
            y_top = self.blockBoundingGeometry(doc.findBlockByNumber(top)).translated(origin).y()
            y_bot = self.blockBoundingGeometry(doc.findBlockByNumber(bot)).translated(origin).y()
            if max(y_top, y_bot) < ceiling:
                continue
            if min(y_top, y_bot) > floor:
                break
            painter.setFont(self.heading_font)
            br = painter.drawText(3, y_top, w, y_bot - y_top - 5, Qt.TextSingleLine, text)
            painter.setPen(QPen(self.palette().text(), 2))
            painter.drawLine(0, br.bottom()+3, w, br.bottom()+3)

        for top, bot, kind in self.changes:
            if bot < fv:
                continue
            y_top = self.blockBoundingGeometry(doc.findBlockByNumber(top)).translated(origin).y()
            y_bot = self.blockBoundingGeometry(doc.findBlockByNumber(bot)).translated(origin).y()
            if max(y_top, y_bot) < ceiling:
                continue
            if min(y_top, y_bot) > floor:
                break
            if y_top != y_bot:
                painter.fillRect(0,  y_top, w, y_bot - y_top, self.diff_backgrounds[kind])
            lines.append((y_top, y_bot, kind))
            if top in self.images:
                img, maxw = self.images[top][:2]
                if bot > top + 1 and not img.isNull():
                    y_top = self.blockBoundingGeometry(doc.findBlockByNumber(top+1)).translated(origin).y() + 3
                    y_bot -= 3
                    scaled, imgw, imgh = fit_image(img.width(), img.height(), w - 3, y_bot - y_top)
                    painter.setRenderHint(QPainter.SmoothPixmapTransform, True)
                    painter.drawPixmap(QRect(3, y_top, imgw, imgh), img)

        painter.end()
        PlainTextEdit.paintEvent(self, event)
        painter = QPainter(self.viewport())
        painter.setClipRect(event.rect())
        for top, bottom, kind in sorted(lines, key=lambda (t, b, k):{'replace':0}.get(k, 1)):
            painter.setPen(QPen(self.diff_foregrounds[kind], 1))
            painter.drawLine(0, top, w, top)
            painter.drawLine(0, bottom - 1, w, bottom - 1)
 def paintEvent(self, e):
     """
     receive paint events
     :param e: QPaintEvent
     :return:
     """
     if self.scaled_img:
         painter = QPainter()
         painter.begin(self)
         painter.scale(self.scale, self.scale)
         painter.drawPixmap(self.point, self.scaled_img)
         painter.end()
Beispiel #15
0
class PaintBoard(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.__InitData()
        self.__InitView()

    def __InitData(self):
        self.__size = QSize(280, 280)
        self.__board = QPixmap(self.__size)
        self.__board.fill(Qt.black)
        self.__isEmpty = True
        self.__lastPose = QPoint(0, 0)
        self.__currentPose = QPoint(0, 0)
        self.__painter = QPainter()
        self.__thickness = 20
        self.__penColor = QColor('white')

    def __InitView(self):
        self.setFixedSize(self.__size)

    def paintEvent(self, paintEvent):
        self.__painter.begin(self)
        self.__painter.drawPixmap(0, 0, self.__board)
        self.__painter.end()

    def mousePressEvent(self, mouseEvent):
        self.__currentPose = mouseEvent.pos()
        self.__lastPose = self.__currentPose

    def mouseMoveEvent(self, mouseEvent):
        self.__currentPose = mouseEvent.pos()
        self.__painter.begin(self.__board)
        self.__painter.setPen(QPen(self.__penColor, self.__thickness))
        self.__painter.drawLine(self.__lastPose, self.__currentPose)
        self.__painter.end()
        self.__lastPose = self.__currentPose
        self.update()

    def mouseReleaseEvent(self, mouseEvent):
        self.__isEmpty = False

    def clear(self):
        self.__board.fill(Qt.black)
        self.update()
        self.__isEmpty = True

    def isEmpty(self):
        return self.__isEmpty

    def getImage(self):
        image = self.__board.toImage()
        return image
Beispiel #16
0
    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.drawPixmap(0, 0, self._pixmap)
        painter.fillRect(self.rect(), self.palette().midlight().color())

        round_path = QPainterPath()
        round_path.addRoundedRect(0, 0, self.width(), self.height(), 5, 5)
        sq_path = QPainterPath()
        sq_path.addRect(0, 0, 10, self.height())
        draw_path = sq_path - round_path
        painter.setPen(Qt.NoPen)
        painter.setBrush(self.palette().dark().color())
        painter.drawPath(draw_path)
 def _get_scaled_icon(self, icon):
     if icon.isNull():
         return self.blank_icon
     # We need the icon scaled to 16x16
     src = icon.pixmap(ICON_SIZE, ICON_SIZE)
     if src.width() == ICON_SIZE and src.height() == ICON_SIZE:
         return icon
     # Need a new version of the icon
     pm = QPixmap(ICON_SIZE, ICON_SIZE)
     pm.fill(Qt.transparent)
     p = QPainter(pm)
     p.drawPixmap(QPoint((ICON_SIZE - src.width()) / 2, (ICON_SIZE - src.height()) / 2), src)
     p.end()
     return QIcon(pm)
Beispiel #18
0
 def paintEvent(self, ev):
     if self.timer.isActive():
         if not self.errored_out:
             try:
                 draw_snake_spinner(QPainter(self), self.rect(), self.angle, self.light, self.dark)
             except Exception:
                 import traceback
                 traceback.print_exc()
                 self.errored_out = True
     else:
         r = self.rect()
         painter = QPainter(self)
         painter.setRenderHint(QPainter.SmoothPixmapTransform, True)
         icon = downloads_icon()
         pmap = icon.pixmap(r.width(), r.height())
         x = (r.width() - int(pmap.width() / pmap.devicePixelRatio())) // 2
         y = (r.height() - int(pmap.height() / pmap.devicePixelRatio())) // 2 + 1
         painter.drawPixmap(x, y, pmap)
Beispiel #19
0
 def paintEvent(self, event):
     if self.pixmap.isNull():
         return
     canvas_size = self.rect()
     width = self.current_pixmap_size.width()
     extrax = canvas_size.width() - width
     if extrax < 0:
         extrax = 0
     x = int(extrax / 2.0)
     height = self.current_pixmap_size.height()
     extray = canvas_size.height() - height
     if extray < 0:
         extray = 0
     y = int(extray / 2.0)
     target = QRect(x, y, min(canvas_size.width(), width), min(canvas_size.height(), height))
     p = QPainter(self)
     p.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
     p.drawPixmap(target, self.pixmap.scaled(target.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))
     p.end()
Beispiel #20
0
 def paintEvent(self, ev):
     if self.timer.isActive():
         if not self.errored_out:
             try:
                 draw_snake_spinner(QPainter(self), self.rect(), self.angle,
                                    self.light, self.dark)
             except Exception:
                 import traceback
                 traceback.print_exc()
                 self.errored_out = True
     else:
         r = self.rect()
         painter = QPainter(self)
         painter.setRenderHint(QPainter.SmoothPixmapTransform, True)
         icon = downloads_icon()
         pmap = icon.pixmap(r.width(), r.height())
         x = (r.width() - int(pmap.width() / pmap.devicePixelRatio())) // 2
         y = (r.height() -
              int(pmap.height() / pmap.devicePixelRatio())) // 2 + 1
         painter.drawPixmap(x, y, pmap)
Beispiel #21
0
    def paintEvent(self, event):
        pmap = self.blank if self.pixmap is None or self.pixmap.isNull() else self.pixmap
        target = self.rect()
        scaled, width, height = fit_image(pmap.width(), pmap.height(), target.width(), target.height())
        target.setRect(target.x(), target.y(), width, height)
        p = QPainter(self)
        p.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
        p.drawPixmap(target, pmap)

        if self.pixmap is not None and not self.pixmap.isNull():
            sztgt = target.adjusted(0, 0, 0, -4)
            f = p.font()
            f.setBold(True)
            p.setFont(f)
            sz = u'\u00a0%d x %d\u00a0'%(self.pixmap.width(), self.pixmap.height())
            flags = Qt.AlignBottom|Qt.AlignRight|Qt.TextSingleLine
            szrect = p.boundingRect(sztgt, flags, sz)
            p.fillRect(szrect.adjusted(0, 0, 0, 4), QColor(0, 0, 0, 200))
            p.setPen(QPen(QColor(255,255,255)))
            p.drawText(sztgt, flags, sz)
        p.end()
Beispiel #22
0
    def paintEvent(self, event):
        if self._flag_1:
            qp = QPainter()
            qp.begin(self)

            qp.setBrush(QColor(255, 237,
                               0))  # задаем желтый цвет для рамки выбора
            qp.drawRect(self._col * 40 + 15, self._activ_pic * 50, 50,
                        50)  # задаем положение и размер рамки выбора

            for i in range(self._col):
                for j in range(self._row):
                    qp.setBrush(QColor(50, 50, 50))
                    qp.drawRect(i * 40, j * 40, 40, 40)
                    qp.drawPixmap(i * 40, j * 40, self._elem_map[
                        self._sp_map[j][i]])  # рисуем картинками из elem_map

            for i in range(PIC):
                qp.drawPixmap(self._col * 40 + 20, i * 50 + 5,
                              self._elem_map[i])

            if self._mouse_x < self._col * 40 and self._mouse_y < self._row * 40:
                qp.drawPixmap(self._mouse_x - 30, self._mouse_y - 30,
                              self._elem_map[self._activ_pic])
            qp.end()
Beispiel #23
0
 def paintEvent(self, event):
     QWidget.paintEvent(self, event)
     pmap = self._pixmap
     if pmap.isNull():
         return
     w, h = pmap.width(), pmap.height()
     ow, oh = w, h
     cw, ch = self.rect().width(), self.rect().height()
     scaled, nw, nh = fit_image(w, h, cw, ch)
     if scaled:
         pmap = pmap.scaled(int(nw * pmap.devicePixelRatio()),
                            int(nh * pmap.devicePixelRatio()),
                            Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
     w, h = int(pmap.width() / pmap.devicePixelRatio()), int(
         pmap.height() / pmap.devicePixelRatio())
     x = int(abs(cw - w) / 2.)
     y = int(abs(ch - h) / 2.)
     target = QRect(x, y, w, h)
     p = QPainter(self)
     p.setRenderHints(QPainter.Antialiasing
                      | QPainter.SmoothPixmapTransform)
     p.drawPixmap(target, pmap)
     if self.draw_border:
         pen = QPen()
         pen.setWidth(self.BORDER_WIDTH)
         p.setPen(pen)
         p.drawRect(target)
     if self.show_size:
         sztgt = target.adjusted(0, 0, 0, -4)
         f = p.font()
         f.setBold(True)
         p.setFont(f)
         sz = u'\u00a0%d x %d\u00a0' % (ow, oh)
         flags = Qt.AlignBottom | Qt.AlignRight | Qt.TextSingleLine
         szrect = p.boundingRect(sztgt, flags, sz)
         p.fillRect(szrect.adjusted(0, 0, 0, 4), QColor(0, 0, 0, 200))
         p.setPen(QPen(QColor(255, 255, 255)))
         p.drawText(sztgt, flags, sz)
     p.end()
Beispiel #24
0
    def paintEvent(self, ev):
        if self.before_image is None:
            return
        canvas_size = self.rect()
        p = QPainter(self)
        p.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)

        p.drawPixmap(canvas_size, self.before_image, self.before_image.rect())
        if self.after_image is not None:
            width = self._current_width
            iw = self.after_image.width()
            sh = min(self.after_image.height(), canvas_size.height())

            if self.flip_forwards:
                source = QRect(max(0, iw - width), 0, width, sh)
            else:
                source = QRect(0, 0, width, sh)

            target = QRect(source)
            target.moveLeft(0)
            p.drawPixmap(target, self.after_image, source)

        p.end()
Beispiel #25
0
    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        if self.isDown():
            painter.translate(1, 1)

        font = QFont()
        font.setPixelSize(14)
        painter.setFont(font)
        if self._hover or self.isChecked():
            color = self.palette().highlight().color()
            icon = self._hover_icon
        else:
            color = self.palette().text().color()
            icon = self._icon
        painter.setPen(color)

        icon_size = self._icon.size()

        if self._text:
            text_size = painter.fontMetrics().size(0, self._text)
            label_height = (text_size.height() + self._spacing +
                            icon_size.height())
        else:
            label_height = icon_size.height()

        center = self.contentsRect().center()

        painter.drawPixmap(center.x() - icon_size.width() / 2,
                           center.y() - label_height / 2, icon)

        if self._text:
            painter.drawText(center.x() - text_size.width() / 2,
                             center.y() - label_height / 2, text_size.width(),
                             label_height, Qt.AlignBottom | Qt.AlignVCenter,
                             self._text)
Beispiel #26
0
    def paintEvent(self, ev):
        if self.before_image is None:
            return
        canvas_size = self.rect()
        p = QPainter(self)
        p.setRenderHints(QPainter.Antialiasing
                         | QPainter.SmoothPixmapTransform)

        p.drawPixmap(canvas_size, self.before_image, self.before_image.rect())
        if self.after_image is not None:
            width = self._current_width
            iw = self.after_image.width()
            sh = min(self.after_image.height(), canvas_size.height())

            if self.flip_forwards:
                source = QRect(max(0, iw - width), 0, width, sh)
            else:
                source = QRect(0, 0, width, sh)

            target = QRect(source)
            target.moveLeft(0)
            p.drawPixmap(target, self.after_image, source)

        p.end()
Beispiel #27
0
 def paintEvent(self, event):
     QWidget.paintEvent(self, event)
     pmap = self._pixmap
     if pmap.isNull():
         return
     w, h = pmap.width(), pmap.height()
     ow, oh = w, h
     cw, ch = self.rect().width(), self.rect().height()
     scaled, nw, nh = fit_image(w, h, cw, ch)
     if scaled:
         pmap = pmap.scaled(int(nw*pmap.devicePixelRatio()), int(nh*pmap.devicePixelRatio()), Qt.IgnoreAspectRatio,
                 Qt.SmoothTransformation)
     w, h = int(pmap.width()/pmap.devicePixelRatio()), int(pmap.height()/pmap.devicePixelRatio())
     x = int(abs(cw - w)/2.)
     y = int(abs(ch - h)/2.)
     target = QRect(x, y, w, h)
     p = QPainter(self)
     p.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
     p.drawPixmap(target, pmap)
     if self.draw_border:
         pen = QPen()
         pen.setWidth(self.BORDER_WIDTH)
         p.setPen(pen)
         p.drawRect(target)
     if self.show_size:
         sztgt = target.adjusted(0, 0, 0, -4)
         f = p.font()
         f.setBold(True)
         p.setFont(f)
         sz = u'\u00a0%d x %d\u00a0'%(ow, oh)
         flags = Qt.AlignBottom|Qt.AlignRight|Qt.TextSingleLine
         szrect = p.boundingRect(sztgt, flags, sz)
         p.fillRect(szrect.adjusted(0, 0, 0, 4), QColor(0, 0, 0, 200))
         p.setPen(QPen(QColor(255,255,255)))
         p.drawText(sztgt, flags, sz)
     p.end()
Beispiel #28
0
    def paintEvent(self, event):
        qp = QPainter()
        qp.begin(self)
        if self._flag_1:
            for i in range(self.map.get_col()):
                for j in range(self.map.get_row()):
                    qp.drawPixmap(
                        i * 40, j * 40 + 40,
                        self.map.get_elem_xy(
                            i, j).get_pic())  # рисуем картинками из elem_map
            qp.drawPixmap(self.hero.get_x() * 40,
                          self.hero.get_y() * 40 + 40, self.hero.get_pic())
            for enemy in self.enemies:
                qp.drawPixmap(enemy.get_x() * 40,
                              enemy.get_y() * 40 + 40, enemy.get_pic())
            for i in range(game.hero.get_lifes()):
                qp.drawPixmap(280 + i * 40, 0,
                              self.hero._pic[self.hero._STOP][0])

            txt = "00000" + str(self._score)
            self.lable_score.setText(txt[len(txt) - 5:len(txt)])
        qp.end()
Beispiel #29
0
    def paintEvent(self, event):
        painter = QPainter(self)

        if self._inspect:
            painter.drawPixmap(
                (self.width() - self._inspect_map.width()) / 2,
                (self.height() - self._inspect_map.height()) / 2,
                self._inspect_map)
            return

        if self._pixmap.width() > 50:
            painter.setRenderHint(QPainter.SmoothPixmapTransform)
            painter.drawPixmap(self._paint_rect, self._pixmap)
        else:
            painter.drawPixmap((self.width() - self._pixmap.width()) / 2,
                               (self.height() - self._pixmap.height()) / 2,
                               self._pixmap)

        if self._hover:
            painter.setPen(QPen(self.palette().highlight().color(), 2))
            painter.drawRect(self._paint_rect)
Beispiel #30
0
class PaintBoard(QWidget):
    def __init__(self, Parent=None):

        super().__init__(Parent)

        self.__InitData()  #先初始化数据,再初始化界面
        self.__InitView()

    def __InitData(self):

        self.__size = QSize(1024, 512)

        #新建QPixmap作为画板,尺寸为__size
        self.__board = QPixmap(self.__size)
        self.__board.fill(Qt.white)  #用白色填充画板

        self.__IsEmpty = True  #默认为空画板
        self.EraserMode = False  #默认为禁用橡皮擦模式

        self.__lastPos = QPoint(0, 0)  #上一次鼠标位置
        self.__currentPos = QPoint(0, 0)  #当前的鼠标位置

        self.__painter = QPainter()  #新建绘图工具

        self.__thickness = 6  #默认画笔粗细为6px
        self.__eraser = 20

    def __InitView(self):
        #设置界面的尺寸为__size
        self.setFixedSize(self.__size)

    def Clear(self):
        #清空画板
        self.__board.fill(Qt.white)
        self.update()
        self.__IsEmpty = True

    def ChangePenThickness(self, eraser=20):
        #改变橡皮画笔粗细,默认20px
        self.__eraser = eraser

    def IsEmpty(self):
        #返回画板是否为空
        return self.__IsEmpty

    def GetContentAsQImage(self):
        #获取画板内容(返回QImage)
        image = self.__board.toImage()
        return image

    def paintEvent(self, paintEvent):
        #绘图事件
        #绘图时必须使用QPainter的实例,此处为__painter
        #绘图在begin()函数与end()函数间进行
        #begin(param)的参数要指定绘图设备,即把图画在哪里
        #drawPixmap用于绘制QPixmap类型的对象
        self.__painter.begin(self)
        # 0,0为绘图的左上角起点的坐标,__board即要绘制的图
        self.__painter.drawPixmap(0, 0, self.__board)
        self.__painter.end()

    def mousePressEvent(self, mouseEvent):
        #鼠标按下时,获取鼠标的当前位置保存为上一次位置
        self.__currentPos = mouseEvent.pos()
        self.__lastPos = self.__currentPos

    def mouseMoveEvent(self, mouseEvent):
        #鼠标移动时,更新当前位置,并在上一个位置和当前位置间画线
        self.__currentPos = mouseEvent.pos()
        self.__painter.begin(self.__board)

        if self.EraserMode == False:
            #非橡皮擦模式
            self.__painter.setPen(
                QPen(Qt.red, 6, Qt.SolidLine, Qt.RoundCap,
                     Qt.RoundJoin))  #设置画笔颜色,粗细
        else:
            #橡皮擦模式下画笔为纯白色
            self.__painter.setPen(
                QPen(Qt.white, self.__eraser, Qt.SolidLine, Qt.RoundCap,
                     Qt.RoundJoin))

        #画线
        self.__painter.drawLine(self.__lastPos, self.__currentPos)
        self.__painter.end()
        self.__lastPos = self.__currentPos

        self.update()  #更新显示

    def mouseReleaseEvent(self, mouseEvent):
        self.__IsEmpty = False  #画板不再为空
Beispiel #31
0
 def paintEvent(self, ev):
     p = QPainter(self)
     p.setOpacity(min(1, abs(1 - self._fraction)))
     p.drawPixmap(self.rect(), self.icon)
     p.end()
Beispiel #32
0
 def paintEvent(self, e):
     painter = QPainter(self)
     h = self.pixmap.height() / 2
     painter.drawPixmap(self.rect(), self.pixmap,
                        QRect(0, h * (1 if self.isOn else 0),
                              self.pixmap.width(), h))
Beispiel #33
0
class PaintBoard(QWidget):

    set_paint = pyqtSignal(bool)

    def __init__(self, signals: ClientSignal, Parent=None):
        '''
        Constructor
        '''
        super().__init__(Parent)

        self.Signals = signals


        # 是否是本玩家在画图
        # 判断是否需要发送画图信息
        self.Painting = False
        self.BoardSize = QSize(*board_resolution)

        # 新建QPixmap作为画板,尺寸为size
        self.Board = QPixmap(self.BoardSize)
        self.Board.fill(Qt.white)  # 用白色填充画板

        self.IsEmpty = True  # 默认为空画板
        self.EraserMode = False  # 默认为禁用橡皮擦模式

        self.LastPos = QPoint(0, 0)  # 上一次鼠标位置
        self.CurrentPos = QPoint(0, 0)  # 当前的鼠标位置

        self.Painter = QPainter()  # 新建绘图工具

        self.Thickness = default_thickness  # 默认画笔粗细为10px
        self.PenColor = QColor(default_color)  # 设置默认画笔颜色为黑色
        self.ColorList = QColor.colorNames()  # 获取颜色列表

        self.set_paint.connect(self.set_painting)
        self.PaintPoints = []


        self.init_view()


    def init_view(self):
        # 设置界面的尺寸为size
        self.setFixedSize(self.BoardSize)

    def set_painting(self, painting):
        # print('seting painting to', painting)
        self.Painting = painting


    def set_pen_thickness(self, thickness):
        self.Thickness = int(thickness)


    def set_pen_color(self, color):
        self.PenColor = QColor(color)


    def set_eraser(self, e):
        self.EraserMode = e
        if self.Painting:
            self.Signals.EraserChangeSignal.emit(e)
            # self.EraserSender.emit(e)


    def clear(self):
        if self.Painting:
            self.Signals.ClearSignal.emit()
            # self.ClearSender.emit()
        # 清空画板
        self.Board.fill(Qt.white)
        self.repaint()#update()
        self.IsEmpty = True


    def change_pen_color(self, color="black"):
        print('color changed:', color)
        if self.Painting:
            self.Signals.ColorChangeSignal.emit(color)
            # self.ColorSender.emit(color)
        # 改变画笔颜色
        self.PenColor = QColor(color)

    def change_pen_thickness(self, thickness=default_thickness):

        if self.Painting:
            self.Signals.ThicknessChangeSignal.emit(thickness)
            # self.ThicknessSender.emit(thickness)
        # 改变画笔粗细
        self.Thickness = thickness
        # print('thickness:',type(self.thickness), self.thickness)

    # 返回画板是否为空
    def is_empty(self):
        return self.IsEmpty

    def get_content_as_QImage(self):
        # 获取画板内容(返回QImage)
        image = self.Board.toImage()
        return image


    def paintEvent(self, paintEvent):
        # 绘图事件
        # 绘图时必须使用QPainter的实例,此处为painter
        # 绘图在begin()函数与end()函数间进行
        # begin(param)的参数要指定绘图设备,即把图画在哪里
        # drawPixmap用于绘制QPixmap类型的对象
        self.Painter.begin(self)
        # 0,0为绘图的左上角起点的坐标,board即要绘制的图
        self.Painter.drawPixmap(0, 0, self.Board)
        self.Painter.end()


    def mousePressEvent(self, mouseEvent):
        # 鼠标按下时,获取鼠标的当前位置保存为上一次位置
        self.CurrentPos = mouseEvent.pos()
        self.LastPos = self.CurrentPos

        if self.Painting:
            self.Signals.ClickPointSignal.emit(mouseEvent.pos())
            # self.click_point_sender.emit(mouseEvent.pos())


    def mouseMoveEvent(self, mouseEvent):
        # print('moving! painting=', self.Painting)
        if self.Painting:
            # 鼠标移动时,更新当前位置,并在上一个位置和当前位置间画线
            self.CurrentPos = mouseEvent.pos()
            self.paint_point()
            # print('painting...')
            self.repaint()
            # print('complete painting...')
            self.LastPos = self.CurrentPos

            # self.paint_points.append([self.currentPos.x(), self.currentPos.y()])
            # self.paint_point_sender.emit(mouseEvent.pos())
            self.Signals.PaintPointSignal.emit(mouseEvent.pos())

    def mouseReleaseEvent(self, mouseEvent):
        self.IsEmpty = False  # 画板不再为空
        if self.Painting:
            self.Signals.ReleasePointSignal.emit()
            # self.release_point_sender.emit()
            # self.paint_points.clear()

    def paint_point(self):
        self.Painter.begin(self.Board)

        if not self.EraserMode:
            # 非橡皮擦模式
            self.Painter.setPen(QPen(self.PenColor, self.Thickness))  # 设置画笔颜色,粗细
        else:
            # 橡皮擦模式下画笔为纯白色,粗细为10
            self.Painter.setPen(QPen(Qt.white, 10))
            # 画线

        self.Painter.drawLine(self.LastPos, self.CurrentPos)
        self.Painter.end()


    def extern_click(self, x, y):
        self.LastPos = QPoint(x, y)
        self.CurrentPos = QPoint(x, y)


    def extern_paint(self, ps):
        for x,y in ps:
            self.CurrentPos = QPoint(x, y)
            self.paint_point()
            self.LastPos = self.CurrentPos
        self.repaint()


    def reset_last_point(self, x, y):
        self.LastPos = QPoint(x, y)
        self.CurrentPos = QPoint(x, y)
class PaintBoard(QWidget):
    def __init__(self, parent=None):

        super().__init__(parent)

        self.__size = QSize(350, 350)

        # 新建画板,尺寸为__size
        self.__board = QPixmap(self.__size)
        self.__board.fill(Qt.white)  # 用白色填充画板

        self.__painter = QPainter()  # 新建绘图工具
        self.eraser_mode = False  # 默认为禁用橡皮擦模式
        self.__thickness = 6  # 默认画笔粗细为10px

        self.__lastPos = QPoint(0, 0)  # 上一次鼠标位置
        self.__currentPos = QPoint(0, 0)  # 当前的鼠标位置
        self.__undo_num = 0
        self.__redo_num = 0
        self.__undo_list = []
        self.__redo_list = []
        self.__undo_list.append(self.__board.toImage())

        # 设置界面的尺寸为__size
        self.setFixedSize(self.__size)

    def clear(self):
        self.__board.fill(Qt.white)
        # 清空画板
        self.update()
        self.__undo_list.append(self.__board.toImage())
        self.__redo_list = []
        self.__undo_num += 1
        self.__redo_num = 0

    def up(self, image):
        self.__board = image
        # 清空画板
        self.update()
        self.__undo_list.append(self.__board.toImage())
        self.__redo_list = []
        self.__undo_num += 1
        self.__redo_num = 0

    def undo(self):
        if self.__undo_num > 0:
            image = self.__undo_list[self.__undo_num - 1]
            self.__board = QPixmap.fromImage(image)
            self.update()
            self.__redo_list.append(self.__undo_list.pop())
            self.__redo_num += 1
            self.__undo_num -= 1

    def redo(self):
        if self.__redo_num > 0:
            image = self.__redo_list[self.__redo_num - 1]
            self.__board = QPixmap(image)
            self.update()
            self.__undo_list.append(self.__redo_list.pop())
            self.__redo_num -= 1
            self.__undo_num += 1

    def change_pen_thickness(self, thickness=10):
        # 改变画笔粗细
        self.__thickness = thickness

    def get_content_as_image(self):
        # 获取画板内容(返回QImage)
        image = self.__board.toImage()
        return image

    def paintEvent(self, paint_event):
        # 绘图事件
        # 绘图时必须使用QPainter的实例,此处为__painter
        # 绘图在begin()函数与end()函数间进行
        # begin(param)的参数要指定绘图设备,即把图画在哪里
        self.__painter.begin(self)
        # 0,0为绘图的左上角起点的坐标,__board即要绘制的图
        self.__painter.drawPixmap(0, 0, self.__board)
        self.__painter.end()

    def mouse_press_event(self, mouse_event):
        # 鼠标按下时,获取鼠标的当前位置保存为上一次位置
        # self.__currentPos = mouse_event.pos()
        self.__currentPos.setX(mouse_event.pos().x() - 803)
        self.__currentPos.setY(mouse_event.pos().y() - 147)
        self.__lastPos = self.__currentPos

    def mouse_move_event(self, mouse_event):
        # self.__currentPos = mouse_event.pos()
        # 鼠标移动时,更新当前位置,并在上一个位置和当前位置间画线
        self.__currentPos.setX(mouse_event.pos().x() - 803)
        self.__currentPos.setY(mouse_event.pos().y() - 147)
        self.__painter.begin(self.__board)

        if not self.eraser_mode:
            # 非橡皮擦模式
            self.__painter.setPen(QPen(Qt.black,
                                       self.__thickness))  # 设置画笔颜色,粗细
        else:
            # 橡皮擦模式下画笔为纯白色,粗细为10
            self.__painter.setPen(QPen(Qt.white, self.__thickness))

        # 画线
        self.__painter.drawLine(self.__lastPos, self.__currentPos)
        self.__painter.end()
        self.__lastPos = self.__currentPos

        self.update()  # 更新显示

    def mouse_release_event(self, mouse_event):
        self.__undo_list.append(self.__board.toImage())
        self.__redo_list = []
        self.__undo_num += 1
        self.__redo_num = 0
Beispiel #35
0
 def paintEvent(self, ev):
     if self.pixmap is not None:
         x = (self.width() - self.size) // 2
         y = (self.height() - self.size) // 2
         p = QPainter(self)
         p.drawPixmap(x, y, self.size, self.size, self.pixmap)
Beispiel #36
0
class PaintBoard(QWidget):


    def __init__(self, Parent=None):
        '''
        Constructor
        '''
        super().__init__(Parent)

        self.__InitData() #先初始化数据,再初始化界面
        self.__InitView()
        
    def __InitView(self):
        self.setFixedSize(self.__size)
        
    def __InitData(self):
        
        self.__size = QSize(1600,1200)
        
        self.__board = QPixmap(self.__size) #新建QPixmap作为画板,宽350px,高250px
        self.__board.fill(Qt.white) #用白色填充画板
        
        self.__IsEmpty = True #默认为空画板 
        self.EraserMode = False #默认为禁用橡皮擦模式
        
        self.__lastPos = QPoint(0,0)
        self.__currentPos = QPoint(0,0)
        
        self.__painter = QPainter()
        
        self.__thickness = 10       #默认画笔粗细为10px
        self.__penColor = QColor("black")       #设置默认画笔颜色为黑色
        self.__colorList = QColor.colorNames() #获取颜色列表
        
    def Clear(self):
        #清空画板
        self.__board.fill(Qt.white)
        self.update()
        self.__IsEmpty = True
        
    def ChangePenColor(self, color="black"):
        #改变画笔颜色
        self.__penColor = QColor(color)
        
    def ChangePenThickness(self, thickness=10):
        #改变画笔粗细
        self.__thickness = thickness
        
    def IsEmpty(self):
        #返回画板是否为空
        return self.__IsEmpty
    
    def GetContentAsQImage(self):
        #获取画板内容(返回QImage)
        image = self.__board.toImage()
        return image
        
    def paintEvent(self, paintEvent):

        self.__painter.begin(self)
        self.__painter.drawPixmap(0,0,self.__board)
        self.__painter.end()
        
    def mousePressEvent(self, mouseEvent):
        
        self.__currentPos =  mouseEvent.pos()
        self.__lastPos = self.__currentPos
        
        
    def mouseMoveEvent(self, mouseEvent):
        self.__currentPos =  mouseEvent.pos()
        self.__painter.begin(self.__board)
        
        if self.EraserMode == False:
            #非橡皮擦模式
            self.__painter.setPen(QPen(self.__penColor,self.__thickness)) #设置画笔颜色,粗细
        else:
            #橡皮擦模式下画笔为纯白色,粗细为10
            self.__painter.setPen(QPen(Qt.white,10))
            
        self.__painter.drawLine(self.__lastPos, self.__currentPos)
        self.__painter.end()
        self.__lastPos = self.__currentPos
                
        self.update() #更新显示
        
    def mouseReleaseEvent(self, mouseEvent):
        self.__IsEmpty = False #画板不再为空
        
Beispiel #37
0
    def paintEvent(self, evt):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        w = self.width()
        hw = self._handle_width
        w -= hw

        h = self.height()

        if self.maximum() == 0:
            tw = 0
        else:
            tw = w / self.maximum()

        # bar map
        painter.drawPixmap(0, 0, self._bar_map)

        # crop
        painter.translate(hw / 2, 0)
        body_mode = state.get('body_mode')
        if state.get('Crop') or state.get('Loop'):
            cw, ch, oh = self._crop_size
            clip_range = 'crop_range'
            if body_mode is BodyMode.MODEL:
                clip_range = 'loop_range'
            sc, ec = state.get(clip_range)

            if sc is not None and ec is not None:
                painter.fillRect(
                    tw * sc, h - ch - oh,
                    tw * (ec - sc), ch / 2,
                    self.palette().base().color()
                )
            if sc is not None:
                painter.fillPath(
                    self._crop_path.translated(tw * sc - cw / 2, h - ch - oh),
                    self._crop_brush
                )
            if ec is not None:
                painter.fillPath(
                    self._crop_path.translated(tw * ec - cw / 2, h - ch - oh),
                    self._crop_brush
                )
        painter.translate(-hw / 2, 0)

        # normal
        super().paintEvent(evt)

        frames = state.get('frames')
        fm = painter.fontMetrics()
        text = str(frames[self.value()])
        width = fm.width(text)
        x = self.value() * tw - width / 2 + hw / 2
        x_max_width = self.width() - width

        if x < 0:
            x = 0
        elif x > x_max_width:
            x = x_max_width

        painter.drawText(
            x, 0, width, 20,
            Qt.AlignCenter,
            text
        )
Beispiel #38
0
 def paintEvent(self, ev):
     p = QPainter(self)
     p.setOpacity(min(1, abs(1 - self._fraction)))
     p.drawPixmap(self.rect(), self.icon)
     p.end()
Beispiel #39
0
 def paintEvent(self, ev):
     if self.pixmap is not None:
         x = (self.width() - self.size) // 2
         y = (self.height() - self.size) // 2
         p = QPainter(self)
         p.drawPixmap(x, y, self.size, self.size, self.pixmap)
Beispiel #40
0
class PaintBoard(QWidget):

    def __init__(self, Parent=None):
        '''
        Constructor
        '''
        super().__init__(Parent)

        self.__InitData()  # 先初始化数据,再初始化界面
        self.__InitView()

    def __InitData(self):

        self.__size = QSize(480, 460)

        # 新建QPixmap作为画板,尺寸为__size
        self.__board = QPixmap(self.__size)
        self.__board.fill(Qt.white)  # 用白色填充画板

        self.__IsEmpty = True  # 默认为空画板
        self.EraserMode = False  # 默认为禁用橡皮擦模式

        self.__lastPos = QPoint(0, 0)  # 上一次鼠标位置
        self.__currentPos = QPoint(0, 0)  # 当前的鼠标位置

        self.__painter = QPainter()  # 新建绘图工具

        self.__thickness = 10  # 默认画笔粗细为10px
        self.__penColor = QColor("black")  # 设置默认画笔颜色为黑色
        self.__colorList = QColor.colorNames()  # 获取颜色列表

    def __InitView(self):
        # 设置界面的尺寸为__size
        self.setFixedSize(self.__size)

    def Clear(self):
        # 清空画板
        self.__board.fill(Qt.white)
        self.update()
        self.__IsEmpty = True

    def ChangePenColor(self, color="black"):
        # 改变画笔颜色
        self.__penColor = QColor(color)

    def ChangePenThickness(self, thickness=10):
        # 改变画笔粗细
        self.__thickness = thickness

    def IsEmpty(self):
        # 返回画板是否为空
        return self.__IsEmpty

    def GetContentAsQImage(self):
        # 获取画板内容(返回QImage)
        image = self.__board.toImage()
        return image

    def paintEvent(self, paintEvent):
        # 绘图事件
        # 绘图时必须使用QPainter的实例,此处为__painter
        # 绘图在begin()函数与end()函数间进行
        # begin(param)的参数要指定绘图设备,即把图画在哪里
        # drawPixmap用于绘制QPixmap类型的对象
        self.__painter.begin(self)
        # 0,0为绘图的左上角起点的坐标,__board即要绘制的图
        self.__painter.drawPixmap(0, 0, self.__board)
        self.__painter.end()

    def mousePressEvent(self, mouseEvent):
        # 鼠标按下时,获取鼠标的当前位置保存为上一次位置
        self.__currentPos = mouseEvent.pos()
        self.__lastPos = self.__currentPos

    def mouseMoveEvent(self, mouseEvent):
        # 鼠标移动时,更新当前位置,并在上一个位置和当前位置间画线
        self.__currentPos = mouseEvent.pos()
        self.__painter.begin(self.__board)

        if self.EraserMode == False:
            # 非橡皮擦模式
            self.__painter.setPen(QPen(self.__penColor, self.__thickness))  # 设置画笔颜色,粗细
        else:
            # 橡皮擦模式下画笔为纯白色,粗细为10
            self.__painter.setPen(QPen(Qt.white, 10))

        # 画线
        self.__painter.drawLine(self.__lastPos, self.__currentPos)
        self.__painter.end()
        self.__lastPos = self.__currentPos

        self.update()  # 更新显示

    def mouseReleaseEvent(self, mouseEvent):
        self.__IsEmpty = False  # 画板不再为空
Beispiel #41
0
    def paintEvent(self, event):
        '''
        @param event QPaintEvent
        '''
        p = QPainter(self)
        p.setRenderHint(QPainter.Antialiasing)

        size = 16
        pixmapSize = round(size *
                           self.data().animationPixmap.devicePixelRatioF())

        # Center the pixmap in rect
        r = QRect(self.rect())
        r.setX((r.width() - size) / 2)
        r.setY((r.height() - size) / 2)
        r.setWidth(size)
        r.setHeight(size)

        if self._animationRunning:
            p.drawPixmap(
                r,
                self.data().animationPixmap,
                QRect(self._currentFrame * pixmapSize, 0, pixmapSize,
                      pixmapSize))
        elif self._audioIconDisplayed and not self._tab.isPinned():
            self._audioIconRect = QRect(r)
            p.drawPixmap(
                r,
                self._tab.isMuted() and self.data().audioMutedPixmap
                or self.data().audioPlayingPixmap)
        elif not self._sitePixmap.isNull():
            p.drawPixmap(r, self._sitePixmap)
        elif self._tab and self._tab.isPinned():
            p.drawPixmap(r, IconProvider.emptyWebIcon().pixmap(size))

        # Draw audio icon on top of site icon for pinned tabs
        if not self._animationRunning and self._audioIconDisplayed and self._tab.isPinned(
        ):
            s = size - 4
            r0 = QRect(self.width() - 4, 0, s, s)
            self._audioIconRect = r0
            c = self.palette().color(QPalette.Window)
            c.setAlpha(180)
            p.setPen(c)
            p.setBrush(c)
            p.drawEllipse(r)
            p.drawPixmap(
                r,
                self._tab.isMuted() and self.data().audioMutedPixmap
                or self.data().audioPlayingPixmap)

        # Draw background activity indicator
        if self._tab and self._tab.isPinned() and self._tab.webView(
        ).backgroundActivity():
            s = 5
            # Background
            r1 = QRect(self.width() - s - 2,
                       self.height() - s - 2, s + 2, s + 2)
            c1 = self.palette().color(QPalette.Window)
            c1.setAlpha(180)
            p.setPen(Qt.transparent)
            p.setBrush(c1)
            p.drawEllipse(r1)
            # Forground
            r2 = QRect(self.width() - s - 1, self.height() - s - 1, s, s)
            c2 = self.palette().color(QPalette.Text)
            p.setPen(Qt.transparent)
            p.setBrush(c2)
            p.drawEllipse(r2)