示例#1
0
 def draw(self, painter: QPainter):
     pen = QPen(Layer.color(LayerType.annotate))
     pen.setCapStyle(Qt.RoundCap)
     pen.setJoinStyle(Qt.RoundJoin)
     pen.setWidth(0)
     painter.setPen(pen)
     painter.drawLine(self.pt1, self.pt2)
示例#2
0
    def paintEvent(self, event):
        """This method draws a left sidebar

        :param event: QEvent
        """

        painter = QPainter(self)
        painter.fillRect(event.rect(), Qt.white)
        width = self.width() - 8
        height = self.editor.fontMetrics().height()
        font = self.editor.font()
        font_bold = self.editor.font()
        font_bold.setBold(True)
        painter.setFont(font)
        pen = QPen(Qt.gray)
        painter.setPen(QPen(QColor("#e9e9e9")))
        painter.drawLine(width + 7, 0, width + 7, event.rect().height())
        painter.setPen(pen)
        current_line = self.editor.textCursor().blockNumber()

        for top, line, block in self.editor.visible_blocks:
            if current_line == line:
                painter.setFont(font_bold)
            else:
                painter.setFont(font)
            painter.drawText(5, top, width, height,
                             Qt.AlignRight, str(line + 1))
示例#3
0
    def image(cls, **kwargs):
        """
        Returns an image suitable for the palette.
        :rtype: QPixmap
        """
        # INITIALIZATION
        pixmap = QPixmap(kwargs['w'], kwargs['h'])
        pixmap.fill(Qt.transparent)
        painter = QPainter(pixmap)
        # INITIALIZE EDGE LINE
        pp1 = QPointF(((kwargs['w'] - 52) / 2), kwargs['h'] / 2)
        pp2 = QPointF(((kwargs['w'] - 52) / 2) + 52 - 2, kwargs['h'] / 2)
        line = QLineF(pp1, pp2)
        # CALCULATE HEAD COORDINATES
        angle = radians(line.angle())
        p1 = QPointF(line.p2().x() + 2, line.p2().y())
        p2 = p1 - QPointF(sin(angle + M_PI / 3.0) * 8, cos(angle + M_PI / 3.0) * 8)
        p3 = p1 - QPointF(sin(angle + M_PI - M_PI / 3.0) * 8, cos(angle + M_PI - M_PI / 3.0) * 8)
        # INITIALIZE EDGE HEAD
        head = QPolygonF([p1, p2, p3])
        # DRAW THE POLYGON
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setPen(QPen(QColor(0, 0, 0), 1.1, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
        painter.drawLine(line)
        # DRAW HEAD
        painter.setPen(QPen(QColor(0, 0, 0), 1.1, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
        painter.setBrush(QColor(0, 0, 0))
        painter.drawPolygon(head)
        # DRAW THE TEXT ON TOP OF THE EDGE
        space = 2 if Platform.identify() is Platform.Darwin else 0
        painter.setFont(Font('Arial', 9, Font.Light))
        painter.drawText(pp1.x() + space, (kwargs['h'] / 2) - 4, 'instanceOf')

        return pixmap
示例#4
0
 def drawLine(line: GridLine, painter: QtGui.QPainter):
     """ Draw line in QPainter """
     pen = QtGui.QPen()
     pen.setColor(line.color)
     pen.setWidth(line.width)
     painter.setPen(pen)
     painter.drawLine(line.start, line.end)
示例#5
0
    def lineNumberAreaPaintEvent(self, event):
        painter = QPainter(self.lineNumbers)
        painter.fillRect(event.rect(), QColor(230, 230, 230))
        d = event.rect().topRight()
        a = event.rect().bottomRight()
        painter.setPen(Qt.darkGray)
        painter.drawLine(d.x(), d.y(), a.x(), a.y())
        painter.setPen(QColor(100, 100, 100))
        painter.setFont(self.font())

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

        while block.isValid() and top <= event.rect().bottom():
            if block.isVisible() and bottom >= event.rect().top():
                number = str(blockNumber + 1)
                painter.drawText(4, top, self.lineNumbers.width() - 8,
                                 self.fontMetrics().height(), Qt.AlignRight,
                                 number)
            block = block.next()
            top = bottom
            bottom = top + int(self.blockBoundingRect(block).height())
            blockNumber += 1
示例#6
0
	def paintEvent(self,event=None):
	    
	    painter = QPainter(self)
	    pixmap=QPixmap(":/images/wheelfinal.png")

	    #painter.begin(self)
	    #painter.drawPixmap(QtCore.QRect(self.left, self.top, self.width, self.height), self.pixmap)
	    painter.drawPixmap(self.rect(), pixmap)
	    self.resize(pixmap.width(),pixmap.height())
	    
	    pen = QPen(Qt.red, 3)
	    painter.setPen(pen)
	    
	    painter.drawArc (self.disc_center-int(self.distance_from_center(self.points[0])) , 
	                        self.disc_center - int(self.distance_from_center (self.points[0])) , 
	                        2*int(self.distance_from_center(self.points[0])) , 
	                        2*int(self.distance_from_center(self.points[0])) , 
	                        int(16*self.hue_min) , 
	                        int(16*(self.hue_max-self.hue_min)))#arc joining point 0 and point 1
	    painter.drawLine(int(self.points[0][0]),int(self.points[0][1]),int(self.points[3][0]),int(self.points[3][1]))#line joining point 0 and point 3
	    painter.drawArc(self.disc_center-int(self.distance_from_center(self.points[2])) , 
	                        self.disc_center - int(self.distance_from_center (self.points[2])) , 
	                        2*int(self.distance_from_center(self.points[2])) , 
	                        2*int(self.distance_from_center(self.points[2])) , 
	                        int(16*self.hue_min) , 
	                        int(16*(self.hue_max-self.hue_min)))#arc joining point 2 and 3
	    painter.drawLine(int(self.points[1][0]),int(self.points[1][1]),int(self.points[2][0]),int(self.points[2][1]))#line joining point 1 and 2
	    
	    self.update()
示例#7
0
 def image(cls, **kwargs):
     """
     Returns an image suitable for the palette.
     :rtype: QPixmap
     """
     # INITIALIZATION
     pixmap = QPixmap(kwargs['w'], kwargs['h'])
     pixmap.fill(Qt.transparent)
     painter = QPainter(pixmap)
     # INIT THE LINE
     p1 = QPointF(((kwargs['w'] - 54) / 2), kwargs['h'] / 2)
     p2 = QPointF(((kwargs['w'] - 54) / 2) + 54 - 2, kwargs['h'] / 2)
     line = QLineF(p1, p2)
     # CLACULATE HEAD COORDS
     angle = line.angle()
     p1 = QPointF(line.p2().x() + 2, line.p2().y())
     p2 = p1 - QPointF(sin(angle + M_PI / 3.0) * 8, cos(angle + M_PI / 3.0) * 8)
     p3 = p1 - QPointF(sin(angle + M_PI - M_PI / 3.0) * 8, cos(angle + M_PI - M_PI / 3.0) * 8)
     # INITIALIZE HEAD
     head = QPolygonF([p1, p2, p3])
     # DRAW EDGE LINE
     painter.setRenderHint(QPainter.Antialiasing)
     painter.setPen(QPen(QColor(0, 0, 0), 1.1, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
     painter.drawLine(line)
     # DRAW EDGE HEAD
     painter.setPen(QPen(QColor(0, 0, 0), 1.1, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
     painter.setBrush(QColor(0, 0, 0))
     painter.drawPolygon(head)
     return pixmap
示例#8
0
    def drawData(self, points=[], color=Qt.black):
        painter = QPainter(self.image)
        painter.setPen(QPen(color, self.myPenWidth, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))

        for n in range(len(points) - 1):
            painter.drawLine(points[n][0], points[n][1], points[n + 1][0], points[n + 1][1])
        self.update()
示例#9
0
    def paintEvent(self, event):
        painter = QPainter(self)
        icon = self.icon_pressed if self.isDown() else self.icon
        if icon is not None:
            x = (self.width() - icon.width()) / 2
            y = (self.height() - icon.height()) / 2
            painter.drawPixmap(x, y, icon)
        else:
            width = self.width()
            height = self.height()

            padding = width / 5
            radius = width - 2*padding

            palette = self.palette()

            # Mid is darker than Dark. Go figure... -Dan
            bg_color = palette.color(QPalette.Mid) if self.isDown() else palette.color(QPalette.Dark)
            fg_color = palette.color(QPalette.Window)  # or QPalette.Base for white

            painter.setRenderHint(QPainter.Antialiasing, True)
            painter.setBrush(bg_color)
            painter.setPen(bg_color)
            painter.drawEllipse(padding, padding, radius, radius)

            padding = padding * 2
            painter.setPen(fg_color)
            painter.drawLine(padding, padding, width-padding, height-padding)
            painter.drawLine(padding, height-padding, width-padding, padding)
示例#10
0
    def paintEvent(self, event):
        rect = QRect(10, 20, 80, 60)

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

        startAngle = 30 * 16
        arcLength = 120 * 16

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

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

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

                painter.restore()

        painter.setPen(self.palette().dark().color())
        painter.setBrush(Qt.NoBrush)
        painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1))
示例#11
0
    def drawLineTo(self, endPoint):
        painter = QPainter(self.image)
        painter.setPen(QPen(self.myPenColor, self.myPenWidth, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))

        painter.drawLine(self.lastPoint, endPoint)
        rad = self.myPenWidth / 2 + 2
        self.update(QRect(self.lastPoint, endPoint).normalized().adjusted(-rad, -rad, +rad, +rad))
        self.lastPoint = QPoint(endPoint)
示例#12
0
 def paintEvent(self, event):
     QLabel.paintEvent(self, event)
     painter = QPainter(self)
     painter.setPen(Qt.blue)
     #painter.setBrush(Qt.yellow)
     #painter.drawRect(10, 10, 100, 100)
     x,y,w,h = self.geometry
     painter.drawLine(x,y+self.perspective[0]*h//1000,x+w,y+self.perspective[1]*h//1000)
     painter.drawLine(x,y+self.perspective[2]*h//1000,x+w,y+self.perspective[3]*h//1000)
示例#13
0
	def paintEvent(self, event):
		if not globalSettings.rightMargin:
			return QTextEdit.paintEvent(self, event)
		painter = QPainter(self.viewport())
		painter.setPen(colorValues['marginLine'])
		y1 = self.rect().topLeft().y()
		y2 = self.rect().bottomLeft().y()
		painter.drawLine(self.marginx, y1, self.marginx, y2)
		QTextEdit.paintEvent(self, event)
示例#14
0
	def paintEvent(self,event):
		pp = QPainter( self.pix)
		# 根据鼠标指针前后两个位置绘制直线
		pp.drawLine( self.lastPoint, self.endPoint)
		# 让前一个坐标值等于后一个坐标值,
		# 这样就能实现画出连续的线
		self.lastPoint = self.endPoint
		painter = QPainter(self)
		painter.drawPixmap(0, 0, self.pix)	
示例#15
0
 def paintEvent(self, event):
     QWidget.paintEvent(self, event)
     width, height = self.width(), self.height()
     polygon = QPolygon()
     for i, rate in enumerate(self.loads):
         x = width - i * self.pointDistance
         y = height - rate * height
         if x < self.boxWidth:
             break
         polygon.append(QPoint(x, y))
     painter = QPainter(self)
     pen = QPen()
     pen.setColor(Qt.darkGreen)
     painter.setPen(pen)
     painter.setRenderHint(QPainter.Antialiasing, True)
     #画网格
     painter.setOpacity(0.5)
     gridSize = self.pointDistance * 4
     deltaX = (width - self.boxWidth) % gridSize + self.boxWidth
     deltaY = height % gridSize
     for i in range(int(width / gridSize)):
         x = deltaX + gridSize * i
         painter.drawLine(x, 0, x, height)
     for j in range(int(height / gridSize)):
         y = j * gridSize + deltaY
         painter.drawLine(self.boxWidth, y, width, y)
     #画折线
     pen.setColor(Qt.darkCyan)
     pen.setWidth(2)
     painter.setPen(pen)
     painter.setOpacity(1)
     painter.drawPolyline(polygon)
     #画展示框
     if len(self.loads) > 0:
         rate = self.loads[0]
     else:
         rate = 1.0
     rect1 = QRect(4, height * 0.05, self.boxWidth - 9, height * 0.7)
     rect2 = QRect(4, height * 0.8, self.boxWidth - 9, height * 0.2)
     centerX = int(rect1.width() / 2) + 1
     pen.setWidth(1)
     for i in range(rect1.height()):
         if i % 4 == 0:
             continue
         if (rect1.height() - i) / rect1.height() > rate:
             pen.setColor(Qt.darkGreen)
         else:
             pen.setColor(Qt.green)
         painter.setPen(pen)
         for j in range(rect1.width()):
             if centerX - 1 <= j <= centerX + 1:
                 continue
             painter.drawPoint(rect1.x() + j, rect1.y() + i)
     pen.setColor(Qt.black)
     painter.setPen(pen)
     painter.drawText(rect2, Qt.AlignHCenter | Qt.AlignVCenter, str(int(rate * 100)) + "%")
示例#16
0
    def paintEvent(self, event):

        # Draw rectangle
        qp = QPainter()
        qp.begin(self)
        x, y, w, h = self.geometry().x(), self.geometry().y(), self.geometry().width(), self.geometry().height()
        qp.drawLine(0, 0, 0, h)
        qp.drawLine(0, h-1, w-1, h-1)
        qp.drawLine(w-1, h-1, w-1, 0)
        qp.end()
示例#17
0
    def paintEvent(self, event):

        super(MyLabel, self).paintEvent(event)
        painter = QPainter(self)
        if not self.cross:
            if self.mouse_pos != None:
                painter.drawLine(QPoint(self.mouse_pos.x(), 0) , QPoint(self.mouse_pos.x(), self.height()))
                painter.drawLine(QPoint(0,self.mouse_pos.y()) , QPoint(self.width(),self.mouse_pos.y()))
        else :
            self.paintCross(painter)
示例#18
0
        def draw_line_to(self, end_point):
            painter = QPainter(self.image)
            painter.setPen(QPen(self.foreground_color if self.scribbling == 1 else self.background_color,
                                self.pen_width, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))

            painter.drawLine(QPoint(self.last_point.x()//self.scaling_factor, self.last_point.y()//self.scaling_factor),
                             QPoint(end_point.x()//self.scaling_factor, end_point.y()//self.scaling_factor))

            self.update()
            self.last_point = QPoint(end_point)
示例#19
0
文件: dmx.py 项目: Tinkerforge/brickv
    def draw_line(self, line, value, painter=None, update=False):
        if painter == None:
            painter = QPainter(self.image)

        painter.setPen(Qt.black)
        painter.drawLine(QPoint(line, 31 - value // 8), QPoint(line, 31))
        painter.setPen(Qt.white)
        painter.drawLine(QPoint(line, 0), QPoint(line, 31 - value // 8))

        if update:
            self.update()
示例#20
0
 def paintEvent(self, event):
     painter = QPainter(self.viewport())
     if self.highlight_line:
         r = self.cursorRect()
         r.setX(0)
         r.setWidth(self.viewport().width())
         painter.fillRect(r, self.highlight_brush)
     if self.draw_line:
         painter.setPen(self.line_pen)
         painter.drawLine(self.line)
     painter.end()
     QPlainTextEdit.paintEvent(self, event)
示例#21
0
    def paint(self, painter: QPainter,
                    option: QStyleOptionGraphicsItem,
                    widget: QWidget):
        """Paint this strand

        Args:
            painter:
            option
            widget:
        """
        painter.setPen(self.pen())
        painter.drawLine(self.line())
示例#22
0
    def paintEvent(self, _event):
        qp = QPainter(self)

        g = QLinearGradient(0.0, 0.0, 0.0, self.height())
        g.setColorAt(0, Qt.white)
        g.setColorAt(1, Qt.black)

        y = self.height() - self.reflectivity * self.height() / 4095.0

        qp.fillRect(0, 0, self.width(), self.height(), g)
        qp.setPen(Qt.red)
        qp.drawLine(0, y, self.width(), y)
示例#23
0
 def draw(self):
     painter = QPainter(self._neditor.viewport())
     painter.setPen(self.__color)
     metrics = QFontMetricsF(self._neditor.font())
     doc_margin = self._neditor.document().documentMargin()
     offset = self._neditor.contentOffset().x() + doc_margin
     x = round(metrics.width(' ') * self.__position) + offset
     if self.__background:
         width = self._neditor.viewport().width() - x
         rect = QRect(x, 0, width, self._neditor.height())
         painter.fillRect(rect, self.__background_color)
     painter.drawLine(x, 0, x, self._neditor.height())
示例#24
0
 def paintEvent(self,e):
     painter = QPainter(self)
     #painter.setRenderHint(QPainter.Antialiasing, True)
     #painter.setPen(QPen(self.color, 6, Qt.SolidLine))
     #painter.setBrush(QBrush(Qt.green, Qt.SolidPattern))
     self.i+=1
     #print(self.i)
     for a in self.demet:
         c, self.x0,self.y0,self.x1,self.y1=a
         a0,a1,a2,a3=c
         color=QColor.fromHsv(a0,a1,a2,a3)
         painter.setPen(QPen(color, 5, Qt.SolidLine))
         painter.drawLine(self.x0,self.y0,self.x1,self.y1) #20, 40, 250, 40
示例#25
0
 def __draw_collapsed_line(self):
     viewport = self._neditor.viewport()
     painter = QPainter(viewport)
     painter.setPen(self.__line_fold_color)
     for top, _, block in self._neditor.visible_blocks:
         if not block.next().isVisible():
             layout = block.layout()
             line = layout.lineAt(layout.lineCount() - 1)
             offset = self._neditor.contentOffset()
             line_rect = line.naturalTextRect().translated(offset.x(), top)
             bottom = line_rect.bottom()
             painter.drawLine(
                 line_rect.x(), bottom, line_rect.width(), bottom)
示例#26
0
    def paintEvent(self, event):
        logger.debug("paintEvent: {0} - {1}".format(self, event.rect()))
        qp = QPainter()
        qp.begin(self)
        
        width = self.size().width() - 1 
        height = self.size().height() - 1 

        #draw border
        qp.setPen(self.border_color)
        qp.drawLine(0, 0, width, 0)
        qp.drawLine(0, 0, 0, height)
        qp.drawLine(width, 0, width, height)
        qp.drawLine(0, height, width, height)

        #draw bar
        width  -= 2
        height -= 2
        value = orig_value = self.data_source()
        value = min(self.max_range, value)
        value = max(self.min_range, value)
        qp.setPen(self.bar_color)
        qp.setBrush(self.bar_color)
        if self.orientation == 'horizontal':
            qp.drawRect(1, 1,
                        width / self.max_range * value, height)
        else:
            qp.drawRect(1, height - (height / self.max_range * value), width, height)
        qp.setPen(self.border_color)
        qp.drawText(event.rect(), Qt.AlignCenter, str(orig_value))
        qp.end()
        logger.debug("paintEvent End: {0}".format(self))
示例#27
0
    def paintEvent(self, event):
        painter = QPainter(self)

        # Background
        painter.setBrush(self.brush)
        painter.setPen(self.pen)
        rect = self.rect()
        painter.drawRect(rect)

        # Line along bottom
        tab_bar_rect = self.findChild(QTabBar).rect()
        rect.moveBottom(tab_bar_rect.bottom())
        painter.setPen(self.bottom_margin)
        painter.drawLine(rect.bottomLeft(), rect.bottomRight())
示例#28
0
文件: analogclock.py 项目: MazeFX/pat
    def paintEvent(self, event):

        side = min(self.width(), self.height())
        time = QTime.currentTime()
        time = time.addSecs(self.timeZoneOffset * 3600)

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

        painter.setPen(Qt.NoPen)
        painter.setBrush(QBrush(self.hourColor))

        painter.save()
        painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)))
        painter.drawConvexPolygon(self.hourHand)
        painter.restore()

        painter.setPen(self.hourColor)

        for i in range(0, 12):
            painter.drawLine(84, 0, 96, 0)
            painter.rotate(30.0)

        painter.setPen(Qt.NoPen)
        painter.setBrush(QBrush(self.minuteColor))

        painter.save()
        painter.rotate(6.0 * (time.minute() + time.second() / 60.0))
        painter.drawConvexPolygon(self.minuteHand)
        painter.restore()

        painter.setPen(QPen(self.minuteColor))

        for j in range(0, 60):
            if (j % 5) != 0:
                painter.drawLine(90, 0, 96, 0)
            painter.rotate(6.0)

        painter.setPen(Qt.NoPen)
        painter.setBrush(QBrush(self.secondColor))

        painter.save()
        painter.rotate(6.0 * time.second())
        painter.drawConvexPolygon(self.secondHand)
        painter.restore()

        painter.end()
示例#29
0
        def paintEvent(self, event):
            painter = QPainter(self)
            painter.drawImage(QRect(0, 0, super().width(), super().height()), self.image)

            if self.grid_enabled:
                painter.setPen(QPen(self.grid_color))

                for x in range(1, self.width):
                    painter.drawLine(x * self.scaling_factor, 0, x * self.scaling_factor, super().height())

                for y in range(1, self.height):
                    painter.drawLine(0, y * self.scaling_factor, super().width(), y * self.scaling_factor)

            self.parent.paint_overlay(event, painter)
示例#30
0
    def paintEvent(self, event):
        logger.debug("paintEvent: {0} - {1}".format(self, event.rect()))
        qp = QPainter()
        qp.begin(self)
        
        width = self.size().width() - 1 
        height = self.size().height() - 1 

        #draw border
        qp.setPen(self.border_color)
        qp.drawLine(0, 0, width, 0)
        qp.drawLine(0, 0, 0, height)
        qp.drawLine(width, 0, width, height)
        qp.drawLine(0, height, width, height)

        #draw plot
        width  -= 1
        height -= 1 
        if len(self.data):
            qp.setPen(self.plot_color)
            max_val = max(self.data)
            points = list();
            for index in range(len(self.data)-1, 1, -1):
                points.append(QPoint((width / 100 * index),       height - (height / max_val * self.data[index])))
            points.append(QPoint(1,     height))
            points.append(QPoint(width, height))
            qp.setBrush(self.plot_color)
            qp.drawPolygon(*points)
        qp.end()
        logger.debug("paintEvent End: {0}".format(self))
示例#31
0
    def paintEvent(self, event):
        dst = self.imgRect()
        qp = QPainter()
        qp.begin(self)

        # draw background
        brush = QBrush(Qt.SolidPattern)
        # brush.setColor(Qt.white)
        brush.setColor(Qt.black)
        qp.setBrush(brush)
        qp.drawRect(dst)
        # brush = QBrush(Qt.DiagCrossPattern)
        # brush.setColor(Qt.black)
        # qp.setBrush(brush)
        # qp.drawRect(dst)

        self.state.paintImage(qp, dst)

        # draw orientation lines
        qp.setPen(QColor(255,255,255,150))
        qp.drawLine(dst.x()+dst.width()/3,dst.y()+0,
            dst.x()+dst.width()/3,dst.y()+dst.height())
        qp.drawLine(dst.x()+dst.width()/2,dst.y()+0,
            dst.x()+dst.width()/2,dst.y()+dst.height())
        qp.drawLine(dst.x()+dst.width()*2/3,dst.y()+0,
            dst.x()+dst.width()*2/3,dst.y()+dst.height())
        qp.drawLine(dst.x()+0,dst.y()+dst.height()/3,
            dst.x()+dst.width(),dst.y()+dst.height()/3)
        qp.drawLine(dst.x()+0,dst.y()+dst.height()/2,
            dst.x()+dst.width(),dst.y()+dst.height()/2)
        qp.drawLine(dst.x()+0,dst.y()+dst.height()*2/3,
            dst.x()+dst.width(),dst.y()+dst.height()*2/3)

        qp.end()
示例#32
0
    def drawSmithChart(self, qp: QtGui.QPainter):
        centerX = int(self.width() / 2)
        centerY = int(self.height() / 2)
        qp.setPen(QtGui.QPen(Chart.color.text))
        qp.drawText(3, 15, self.name)
        qp.setPen(QtGui.QPen(Chart.color.foreground))
        qp.drawEllipse(QtCore.QPoint(centerX, centerY),
                       int(self.dim.width / 2), int(self.dim.height / 2))
        qp.drawLine(centerX - int(self.dim.width / 2), centerY,
                    centerX + int(self.dim.width / 2), centerY)

        qp.drawEllipse(
            QtCore.QPoint(centerX + int(self.dim.width / 4), centerY),
            int(self.dim.width / 4), int(self.dim.height / 4))  # Re(Z) = 1
        qp.drawEllipse(
            QtCore.QPoint(centerX + int(2 / 3 * self.dim.width / 2), centerY),
            int(self.dim.width / 6), int(self.dim.height / 6))  # Re(Z) = 2
        qp.drawEllipse(
            QtCore.QPoint(centerX + int(3 / 4 * self.dim.width / 2), centerY),
            int(self.dim.width / 8), int(self.dim.height / 8))  # Re(Z) = 3
        qp.drawEllipse(
            QtCore.QPoint(centerX + int(5 / 6 * self.dim.width / 2), centerY),
            int(self.dim.width / 12), int(self.dim.height / 12))  # Re(Z) = 5

        qp.drawEllipse(
            QtCore.QPoint(centerX + int(1 / 3 * self.dim.width / 2), centerY),
            int(self.dim.width / 3), int(self.dim.height / 3))  # Re(Z) = 0.5
        qp.drawEllipse(
            QtCore.QPoint(centerX + int(1 / 6 * self.dim.width / 2), centerY),
            int(self.dim.width / 2.4),
            int(self.dim.height / 2.4))  # Re(Z) = 0.2

        qp.drawArc(centerX + int(3 / 8 * self.dim.width), centerY,
                   int(self.dim.width / 4), int(self.dim.width / 4), 90 * 16,
                   152 * 16)  # Im(Z) = -5
        qp.drawArc(centerX + int(3 / 8 * self.dim.width), centerY,
                   int(self.dim.width / 4), -int(self.dim.width / 4), -90 * 16,
                   -152 * 16)  # Im(Z) = 5
        qp.drawArc(centerX + int(self.dim.width / 4), centerY,
                   int(self.dim.width / 2), int(self.dim.height / 2), 90 * 16,
                   127 * 16)  # Im(Z) = -2
        qp.drawArc(centerX + int(self.dim.width / 4), centerY,
                   int(self.dim.width / 2), -int(self.dim.height / 2),
                   -90 * 16, -127 * 16)  # Im(Z) = 2
        qp.drawArc(centerX, centerY, self.dim.width, self.dim.height, 90 * 16,
                   90 * 16)  # Im(Z) = -1
        qp.drawArc(centerX, centerY, self.dim.width, -self.dim.height,
                   -90 * 16, -90 * 16)  # Im(Z) = 1
        qp.drawArc(centerX - int(self.dim.width / 2), centerY,
                   self.dim.width * 2, self.dim.height * 2, int(99.5 * 16),
                   int(43.5 * 16))  # Im(Z) = -0.5
        qp.drawArc(centerX - int(self.dim.width / 2), centerY,
                   self.dim.width * 2, -self.dim.height * 2, int(-99.5 * 16),
                   int(-43.5 * 16))  # Im(Z) = 0.5
        qp.drawArc(centerX - self.dim.width * 2, centerY,
                   self.dim.width * 5, self.dim.height * 5, int(93.85 * 16),
                   int(18.85 * 16))  # Im(Z) = -0.2
        qp.drawArc(centerX - self.dim.width * 2, centerY,
                   self.dim.width * 5, -self.dim.height * 5, int(-93.85 * 16),
                   int(-18.85 * 16))  # Im(Z) = 0.2

        self.drawTitle(qp)

        qp.setPen(Chart.color.swr)
        for swr in self.swrMarkers:
            if swr <= 1:
                continue
            gamma = (swr - 1) / (swr + 1)
            r = round(gamma * self.dim.width / 2)
            qp.drawEllipse(QtCore.QPoint(centerX, centerY), r, r)
            qp.drawText(QtCore.QRect(centerX - 50, centerY - 4 + r, 100, 20),
                        QtCore.Qt.AlignCenter, str(swr))
示例#33
0
class Renderer:
    def __init__(self, width, height, ownWindow=False):
        self.width = width
        self.height = height

        self.img = QImage(width, height, QImage.Format_RGB888)
        self.painter = QPainter()

        self.window = None
        if ownWindow:
            self.app = QApplication([])
            self.window = Window()

    def close(self):
        """
        Deallocate resources used
        """
        pass

    def beginFrame(self):
        self.painter.begin(self.img)
        self.painter.setRenderHint(QPainter.Antialiasing, False)

        # Clear the background
        self.painter.setBrush(QColor(0, 0, 0))
        self.painter.drawRect(0, 0, self.width - 1, self.height - 1)

    def endFrame(self):
        self.painter.end()

        if self.window:
            if self.window.closed:
                self.window = None
            else:
                self.window.setPixmap(self.getPixmap())
                self.app.processEvents()

    def getPixmap(self):
        return QPixmap.fromImage(self.img)

    def getArray(self):
        """
        Get a numpy array of RGB pixel values.
        The size argument should be (3,w,h)
        """

        width = self.width
        height = self.height
        shape = (width, height, 3)

        numBytes = self.width * self.height * 3
        buf = self.img.bits().asstring(numBytes)
        output = np.frombuffer(buf, dtype='uint8')
        output = output.reshape(shape)

        return output

    def push(self):
        self.painter.save()

    def pop(self):
        self.painter.restore()

    def rotate(self, degrees):
        self.painter.rotate(degrees)

    def translate(self, x, y):
        self.painter.translate(x, y)

    def scale(self, x, y):
        self.painter.scale(x, y)

    def setLineColor(self, r, g, b, a=255):
        self.painter.setPen(QColor(r, g, b, a))

    def setColor(self, r, g, b, a=255):
        self.painter.setBrush(QColor(r, g, b, a))

    def setLineWidth(self, width):
        pen = self.painter.pen()
        pen.setWidthF(width)
        self.painter.setPen(pen)

    def drawLine(self, x0, y0, x1, y1):
        self.painter.drawLine(x0, y0, x1, y1)

    def drawCircle(self, x, y, r):
        center = QPoint(x, y)
        self.painter.drawEllipse(center, r, r)

    def drawPolygon(self, points):
        """Takes a list of points (tuples) as input"""
        points = map(lambda p: QPoint(p[0], p[1]), points)
        self.painter.drawPolygon(QPolygon(points))

    def drawPolyline(self, points):
        """Takes a list of points (tuples) as input"""
        points = map(lambda p: QPoint(p[0], p[1]), points)
        self.painter.drawPolyline(QPolygon(points))

    def fillRect(self, x, y, width, height, r, g, b, a=255):
        self.painter.fillRect(QRect(x, y, width, height), QColor(r, g, b, a))
示例#34
0
    def paintEvent(self, event):

        # INITIALISATION painter, etat etc

        # etat joueur True = tir, False = deplacement
        etat = self.model.player.etat

        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setPen(self.style_base)

        poly = self.model.map.polygone
        points = [
            QPoint(poly[0, i], poly[1, i]) for i in range(0, poly.shape[1])
        ]

        # OPTIONS D'AFFICHAGE

        #painter.drawPixmap(100, 100, self.drop)

        # affichage polygone

        if self.show_polygon:

            Qpoly = QPolygon(points)
            painter.setPen(self.style_gris)
            painter.drawPolygon(Qpoly)
            painter.setPen(self.style_base)

        if self.show_numbers:
            for i in range(len(points)):
                painter.drawText(points[i], str(i))

        if self.show_impact:
            painter.setPen(self.style_rouge)
            painter.drawEllipse(QPoint(self.pt_col[0], self.pt_col[1]), 10, 10)
            painter.setPen(self.style_base)

        # affichage arretes découvertes

        if self.show_taches:
            taches = self.model.map.taches
            for tache in taches:
                A = QPoint(tache[0][0], tache[0][1])
                B = QPoint(tache[1][0], tache[1][1])

                painter.drawLine(A, B)

        else:
            arretes = self.model.map.arretes

            for arrete in arretes:
                A = QPoint(poly[0, arrete[0]], poly[1, arrete[0]])
                B = QPoint(poly[0, arrete[1]], poly[1, arrete[1]])

                painter.drawLine(A, B)

        # affichage joueur
        xy = self.model.player.coords

        ###### affichage selon les differents état de jeu #####

        if self.game_over:
            title_font = QtGui.QFont()
            title_font.setFamily("Cooper Black")
            title_font.setPointSize(14)

            self.show_polygon = True

            painter.drawEllipse(QPoint(xy[0], xy[1]), self.r_player,
                                self.r_player)
            painter.drawText(self.size[0] / 2, self.size[1] / 2, 'GameOver')

        elif len(self.model.map.arretes) == len(points) and etat != 4:

            title_font = QtGui.QFont()
            title_font.setFamily("Cooper Black")
            title_font.setPointSize(14)

            self.show_polygon = True

            painter.drawEllipse(QPoint(xy[0], xy[1]), self.r_player,
                                self.r_player)
            painter.drawText(self.size[0] / 2, self.size[1] / 2, 'Bravo !')

        # Demande de tir : 0
        elif etat == 0:
            self.demande_tir(painter)

        # Animation tir
        elif etat == 1:
            self.animation_tir(painter)

        elif etat == 4:
            self.animation_tache(painter)

        # Demande de déplacement
        elif etat == 2:
            self.demande_deplacement(painter)

        # Animation déplacement
        elif etat == 3:
            self.animation_deplacement(painter)

        # Si il y a eu une erreur...
        else:
            self.model.player.etat = 0
 def paintEvent(self, event):
     if self.pos:
         q = QPainter(self)
         q.drawLine(0, 0, self.pos.x(), self.pos.y())
示例#36
0
    def paintEvent(self, event):
        linePen = QPen(Qt.black)
        linePen.setWidth(3)
        width = self.width() / self.scale

        def paintLineMarks(painter):
            painter.save()
            painter.scale(self.scale, yDirection * self.scale)
            painter.setPen(linePen)
            painter.drawLine(0, self.ascender, width, self.ascender)
            painter.drawLine(0, 0, width, 0)
            painter.drawLine(0, self.descender, width, self.descender)
            painter.restore()

        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.fillRect(0, 0, self.width(), self.height(), Qt.white)
        if self._verticalFlip:
            baselineShift = -self.descender
            yDirection = 1
        else:
            baselineShift = self.ascender
            yDirection = -1
        painter.translate(
            self.padding,
            self.padding + baselineShift * self.scale * self._lineHeight)
        # TODO: scale painter here to avoid g*scale everywhere below

        cur_width = 0
        if self._showMetrics:
            paintLineMarks(painter)
        for index, glyph in enumerate(self.glyphs):
            # line wrapping
            gWidth = glyph.width * self.scale
            doKern = index > 0 and self._showKerning and cur_width > 0
            if doKern:
                kern = self.lookupKerningValue(self.glyphs[index - 1].name,
                                               glyph.name) * self.scale
            else:
                kern = 0
            if (self._wrapLines and cur_width + gWidth + kern +
                    2 * self.padding > self.width()) or glyph.unicode == 2029:
                painter.translate(-cur_width, self.ptSize * self._lineHeight)
                if self._showMetrics:
                    paintLineMarks(painter)
                cur_width = gWidth
            else:
                if doKern:
                    painter.translate(kern, 0)
                cur_width += gWidth + kern
            glyphPath = glyph.getRepresentation("defconQt.QPainterPath")
            painter.save()
            painter.scale(self.scale, yDirection * self.scale)
            if self._showMetrics:
                halfDescent = self.descender / 2
                painter.drawLine(0, 0, 0, halfDescent)
                painter.drawLine(glyph.width, 0, glyph.width, halfDescent)
            if self._selected is not None and index == self._selected:
                painter.fillRect(0, self.descender, glyph.width, self.upm,
                                 glyphSelectionColor)
            painter.fillPath(glyphPath, Qt.black)
            painter.restore()
            painter.translate(gWidth, 0)
示例#37
0
    def draw_lines(self, painter: QtGui.QPainter) -> None:
        # переключаем кисть
        painter.setPen(self.label_pen)
        painter.setBackground(QtCore.Qt.white)

        # из TY1 в T1
        painter.drawLine(self.points["TY1"], self.points["T1"])

        # из T1 в TX
        painter.drawLine(self.points["T1"], self.points["TX"])

        # из TX в T2
        painter.drawLine(self.points["TX"], self.points["T2"])

        # из T2 в TZ
        painter.drawLine(self.points["T2"], self.points["TZ"])

        # из TZ в T3
        painter.drawLine(self.points["TZ"], self.points["T3"])

        # Из T3 в TY3
        painter.drawLine(self.points["T3"], self.points["TY3"])

        # рисуем сектор
        self.draw_arc(painter)
示例#38
0
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Tree Viewer")
        self.setFixedHeight(600)
        self.setFixedWidth(800)

        self.actionUp = QAction()
        self.actionUp.triggered.connect(self.selecUp)
        self.actionUp.setShortcut('Z')
        self.actionDown = QAction()
        self.actionDown.triggered.connect(self.selecDown)
        self.actionDown.setShortcut('S')
        self.actionLeft = QAction()
        self.actionLeft.triggered.connect(self.selecLeft)
        self.actionLeft.setShortcut('Q')
        self.actionRight = QAction()
        self.actionRight.triggered.connect(self.selecRight)
        self.actionRight.setShortcut('D')
        self.actionAddKnot = QAction()
        self.actionAddKnot.triggered.connect(self.addKnot)
        self.actionAddKnot.setShortcut('A')
        self.actionRemoveKnot = QAction()
        self.actionRemoveKnot.triggered.connect(self.removeKnot)
        self.actionRemoveKnot.setShortcut('R')

        self.addAction(self.actionUp)
        self.addAction(self.actionDown)
        self.addAction(self.actionLeft)
        self.addAction(self.actionRight)
        self.addAction(self.actionAddKnot)
        self.addAction(self.actionRemoveKnot)

        self.tree = Knot('A',
                         left=Knot('B', left=Knot('D'), right=Knot('E')),
                         right=Knot('C', left=Knot('F'), right=Knot('G')))
        self.setUI()

    def setUI(self):
        self.frameInfos = QFrame(self)
        self.frameInfos.setGeometry(600, 0, 200, 600)
        self.frameInfos.setStyleSheet(
            ".QFrame{border: 2px solid rgb(144,144,144);\nborder-radius: 10px;}"
        )

        self.frameTree = QFrame(self)
        self.frameTree.setGeometry(0, 0, 600, 600)
        self.frameTree.setStyleSheet(
            ".QFrame{border: 2px solid rgb(144,144,144);\nborder-radius: 10px;}"
        )

        self.updateTree()

        self.windowAddKnot = QDialog(self, Qt.Drawer)
        self.windowAddKnot.setFixedWidth(400)
        self.windowAddKnot.setFixedHeight(200)
        self.windowAddKnot.labelKnotName = QLabel(
            f'Knot Name: {self.selected.name}', self.windowAddKnot)
        self.windowAddKnot.labelKnotName.setAlignment(Qt.AlignCenter)
        self.windowAddKnot.labelKnotName.setGeometry(110, 10, 180, 20)
        self.windowAddKnot.labelSide = QLabel('Choose which child side:',
                                              self.windowAddKnot)
        self.windowAddKnot.labelSide.setGeometry(10, 40, 180, 20)
        self.windowAddKnot.comboSide = QComboBox(self.windowAddKnot)
        self.windowAddKnot.comboSide.addItems(
            ['left', 'right'] if not self.selected.left and not self.selected.
            right else ['left'] if self.selected.right else ['right'])
        self.windowAddKnot.comboSide.setGeometry(210, 40, 180, 20)
        self.windowAddKnot.labelKnot = QLabel('Choose Knot\'s name:',
                                              self.windowAddKnot)
        self.windowAddKnot.labelKnot.setGeometry(10, 70, 180, 20)
        self.windowAddKnot.entryKnot = QLineEdit(self.windowAddKnot)
        self.windowAddKnot.entryKnot.setGeometry(210, 70, 180, 20)
        self.windowAddKnot.buttonValidate = QPushButton(
            'Add Knot', self.windowAddKnot)
        self.windowAddKnot.buttonValidate.setGeometry(110, 130, 180, 20)
        self.windowAddKnot.buttonValidate.clicked.connect(
            lambda: self.verifyAddition(
                self.windowAddKnot.comboSide.currentText(),
                self.windowAddKnot.entryKnot.text()))

        self.windowError = QMessageBox()
        self.windowError.setIcon(QMessageBox.Information)

        self.labelKnotName = QLabel(f'Knot Name: {self.selected.name}',
                                    self.frameInfos)
        self.labelKnotName.setStyleSheet(
            'border: 2px solid rgb(144,144,144);\nborder-radius: 15px;')
        self.labelKnotName.setGeometry(10, 10, 180, 30)
        self.labelKnotName.setAlignment(Qt.AlignCenter)
        self.labelKnotLeaf = QLabel(f'Knot is leaf: {self.selected.isLeaf()}',
                                    self.frameInfos)
        self.labelKnotLeaf.setGeometry(10, 40, 180, 20)
        self.labelKnotAlt = QLabel(f'Knot Altitude: {self.selected.i}',
                                   self.frameInfos)
        self.labelKnotAlt.setGeometry(10, 70, 180, 20)
        self.labelKnotRank = QLabel(f'Knot Rank: {self.selected.r}',
                                    self.frameInfos)
        self.labelKnotRank.setGeometry(10, 100, 180, 20)

        self.labelKnotParent = QLabel(
            f'Parent Name: {self.selected.parentKnot.name}'
            if self.selected.parentKnot else 'Root Knot', self.frameInfos)
        self.labelKnotParent.setGeometry(10, 150, 180, 20)
        self.labelKnotChildLeft = QLabel(
            f'Left Child Name: {self.selected.left.name}'
            if self.selected.left else 'No Left Child', self.frameInfos)
        self.labelKnotChildLeft.setGeometry(10, 180, 180, 20)
        self.labelKnotChildRight = QLabel(
            f'Right Child Name: {self.selected.right.name}'
            if self.selected.right else 'No Right Child', self.frameInfos)
        self.labelKnotChildRight.setGeometry(10, 210, 180, 20)

        self.buttonRemoveKnot = QPushButton('Remove Knot', self.frameInfos)
        self.buttonRemoveKnot.setFocusPolicy(Qt.NoFocus)
        self.buttonRemoveKnot.setGeometry(10, 240, 180, 20)
        self.buttonRemoveKnot.clicked.connect(self.removeKnot)

        self.buttonAddKnot = QPushButton('Add Child', self.frameInfos)
        self.buttonAddKnot.setFocusPolicy(Qt.NoFocus)
        self.buttonAddKnot.setGeometry(10, 270, 180, 20)
        self.buttonAddKnot.clicked.connect(self.addKnot)

    def removeKnot(self):
        if self.selected == self.tree:
            self.showError('Cannot remove root knot', 'Root Error')
        else:
            self.knotCoordinates = []
            self.tree.removeKnot(self.selected.name)
            self.tree.traceTree()
            self.selected = self.tree
            self.selectKnot()
            self.frameTree.update()

    def addKnot(self):
        if self.selected.left and self.selected.right:
            self.showError('Knot has already two children', 'Children Error')
        else:
            self.windowAddKnot.comboSide.clear()
            self.windowAddKnot.comboSide.addItems(['left', 'right'] if (
                not self.selected.left and not self.selected.right
            ) else ['left'] if self.selected.right else ['right'])
            self.windowAddKnot.labelKnotName.setText(
                f'Knot Name: {self.selected.name}')
            self.windowAddKnot.setWindowModality(Qt.ApplicationModal)
            self.windowAddKnot.setFocusPolicy(Qt.StrongFocus)
            self.windowAddKnot.activateWindow()
            self.windowAddKnot.setFocus(True)
            self.windowAddKnot.raise_()
            self.windowAddKnot.show()

    def verifyAddition(self, side, name):
        if name:
            s = self.tree.search(name)
            if not s[0]:
                if side == 'left': self.selected.left = Knot(name)
                else: self.selected.right = Knot(name)
                self.windowAddKnot.hide()
            elif s[1] != self.tree:
                buttonReply = QMessageBox.question(
                    self.windowAddKnot, f'{name} is already in use',
                    f"Do you want to transfer children to {self.selected.name} ?\n{name} wille be the {side} child of {self.selected.name}",
                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
                if buttonReply == QMessageBox.Yes:
                    if side == 'left':
                        if s[1].parentKnot.left:
                            if s[1].parentKnot.left.name == name:
                                self.selected.left = s[1].parentKnot.left
                                s[1].parentKnot.left = None
                        if s[1].parentKnot.right:
                            if s[1].parentKnot.right.name == name:
                                self.selected.left = s[1].parentKnot.right
                                s[1].parentKnot.right = None
                        self.selected.left.parent = self.selected

                    else:
                        if s[1].parentKnot.left and s[
                                1].parentKnot.left.name == name:
                            self.selected.right = s[1].parentKnot.left
                            s[1].parentKnot.left = None

                        elif s[1].parentKnot.right and s[
                                1].parentKnot.right.name == name:
                            self.selected.right = s[1].parentKnot.right
                            s[1].parentKnot.right = None
                        self.selected.right.parent = self.selected
                    self.windowAddKnot.hide()
            else:
                self.showError('You can\'t modify tree root', 'Root Error')

            self.activateWindow()
            self.updateTree()
            self.selectKnot()

    def updateTree(self):
        self.knotCoordinates = []
        self.selected = self.tree
        self.tree.alt = self.tree.getAlt() - 1
        self.tree.setInfos(self)
        self.tree.setLabel()
        self.tree.traceTree()
        self.frameTree.update()
        self.tree.label.setStyleSheet(
            "border: 2px solid rgb(0,0,144);\nborder-radius:10px;")

    def paintEvent(self, e):
        self.painter = QPainter(self)
        for cos in self.knotCoordinates:
            if self.selected.x == cos[0] and self.selected.y + 30 == cos[1]:
                self.painter.setPen(
                    QPen(QColor(144, 0, 0), 3, Qt.SolidLine, Qt.RoundCap,
                         Qt.RoundJoin))
            elif self.selected.x == cos[2] and self.selected.y + 10 == cos[3]:
                self.painter.setPen(
                    QPen(QColor(0, 144, 0), 3, Qt.SolidLine, Qt.RoundCap,
                         Qt.RoundJoin))
            else:
                self.painter.setPen(
                    QPen(QColor(0, 0, 144), 3, Qt.SolidLine, Qt.RoundCap,
                         Qt.RoundJoin))
            self.painter.drawLine(cos[0], cos[1], cos[2], cos[3])
        self.painter.end()

    def mousePressEvent(self, event):
        pos = QCursor.pos()
        w = app.widgetAt(pos)
        if w != self.frameTree and w is not self.selected.label and 0 <= pos.x(
        ) <= 600 and 0 <= pos.y() <= 600:
            self.selected.label.setStyleSheet(
                "border: 2px solid rgb(144,144,144);\nborder-radius:10px;")
            s = self.tree.search(w.text())
            self.selected = s[1]
            self.selectKnot()

    def selectKnot(self):
        self.selected.label.setStyleSheet(
            "border: 2px solid rgb(0,0,144);\nborder-radius:10px;")
        self.labelKnotName.setText(f"Knot Name: {self.selected.name}")
        self.labelKnotLeaf.setText(f"Knot is Leaf: {self.selected.isLeaf()}")
        self.labelKnotAlt.setText(f"Knot Altitude: {self.selected.i}")
        self.labelKnotRank.setText(f"Knot Rank: {self.selected.r}")
        self.labelKnotParent.setText(
            f'Parent Name: {self.selected.parentKnot.name}' if self.selected.
            parentKnot else 'Root Knot')
        self.labelKnotChildLeft.setText(
            f"Left Child Name: {self.selected.left.name}" if self.selected.
            left else f"No Left Child")
        self.labelKnotChildRight.setText(
            f"Right Child Name: {self.selected.right.name}" if self.selected.
            right else f"No Right Child")
        self.update()

    def selecUp(self):
        if self.selected.parentKnot:
            self.selected.label.setStyleSheet(
                "border: 2px solid rgb(144,144,144);\nborder-radius:10px;")
            self.selected = self.selected.parentKnot
            self.selectKnot()

    def selecLeft(self):
        if self.selected.parentKnot and self.selected.r != 1:
            k = self.selected.parentKnot
            checked = [self.selected.name]
            while self.selected.i != k.i:
                last = k
                if k.right and (k.right.name not in checked
                                and k.right.r < self.selected.r):
                    checked.append(k.name)
                    k = k.right
                elif k.left and (k.left.name not in checked):
                    checked.append(k.name)
                    k = k.left
                elif k.parentKnot and (k.parentKnot.name not in checked):
                    checked.append(k.name)
                    k = k.parentKnot
                elif last == k:
                    k = self.selected
            self.selected.label.setStyleSheet(
                "border: 2px solid rgb(144,144,144);\nborder-radius:10px;")
            self.selected = k
            self.selectKnot()

    def selecRight(self):
        if self.selected.parentKnot and self.selected.r != 2**self.selected.i:
            k = self.selected.parentKnot
            checked = [self.selected.name]
            while self.selected.i != k.i:
                last = k
                if k.left and (k.left.name not in checked
                               and k.left.r > self.selected.r):
                    checked.append(k.name)
                    k = k.left
                elif k.right and (k.right.name not in checked):
                    checked.append(k.name)
                    k = k.right
                elif k.parentKnot and (k.parentKnot.name not in checked):
                    checked.append(k.name)
                    k = k.parentKnot
                elif last == k:
                    k = self.selected
            self.selected.label.setStyleSheet(
                "border: 2px solid rgb(144,144,144);\nborder-radius:10px;")
            self.selected = k
            self.selectKnot()

    def selecDown(self):
        if self.selected.left:
            self.selected.label.setStyleSheet(
                "border: 2px solid rgb(144,144,144);\nborder-radius:10px;")
            self.selected = self.selected.left
            self.selectKnot()
        elif self.selected.right:
            self.selected.label.setStyleSheet(
                "border: 2px solid rgb(144,144,144);\nborder-radius:10px;")
            self.selected = self.selected.right
            self.selectKnot()

    def showError(self, text, title):
        self.windowError.setText(text)
        self.windowError.setWindowTitle(title)
        self.windowError.show()
    def paintEvent(self, event):
        qp = QPainter(self)

        qp.setRenderHint(
            QPainter.Antialiasing
        )  # <- Set anti-aliasing  See https://wiki.python.org/moin/PyQt/Painting%20and%20clipping%20demonstration

        size = self.size()
        widget_width, widget_height = size.width(), size.height()

        # Make fonts

        time_label_font = qp.font()
        time_label_font.setPointSize(self.time_label_font_size)

        task_label_font = qp.font()
        task_label_font.setPointSize(self.task_label_font_size)

        # Frame

        qp.setPen(QPen(Qt.black, self.border_size, Qt.SolidLine))
        qp.setBrush(QBrush(Qt.white, Qt.SolidPattern))

        qp.drawRect(
            self.margin_size + self.time_label_margin,  # x_start
            self.margin_size,  # y_start
            widget_width - 2 * self.margin_size -
            self.time_label_margin,  # x_size
            widget_height - 2 * self.margin_size)  # y_size

        ## Starting time label

        #qp.setFont(time_label_font)

        #qp.drawText(0, #self.margin_size,   # x_start
        #            self.margin_size - int(self.time_label_font_size/2), # y_start
        #            self.time_label_margin, # x_size
        #            self.time_label_font_size,   # y_size
        #            Qt.AlignCenter,
        #            self.starting_time_str)

        ## Ending time label

        #qp.setFont(time_label_font)

        #qp.drawText(0, #self.margin_size,   # x_start
        #            widget_height - self.margin_size - int(self.time_label_font_size/2), # y_start
        #            self.time_label_margin, # x_size
        #            self.time_label_font_size,   # y_size
        #            Qt.AlignCenter,
        #            self.ending_time_str)

        # Draw a line for each hour

        qp.setPen(QPen(Qt.gray, 1, Qt.SolidLine))
        qp.setFont(time_label_font)

        if self.starting_time.minute == 0:
            i = 0
        else:
            i = 1

        marker_time = datetime.datetime(year=self.starting_time.year,
                                        month=self.starting_time.month,
                                        day=self.starting_time.day,
                                        hour=self.starting_time.hour + i)

        while marker_time.hour <= self.ending_time.hour:
            time_marker_str = marker_time.strftime("%H:%M")
            marker_time_y_pos = self.timeCoordinateMapper(time_marker_str)

            qp.drawLine(
                self.margin_size + self.time_label_margin,  # x_start
                marker_time_y_pos,  # y_start
                widget_width - self.margin_size,  # x_end
                marker_time_y_pos)  # y_end

            qp.drawText(
                0,  #self.margin_size,   # x_start
                marker_time_y_pos -
                int(self.time_label_font_size / 2),  # y_start
                self.time_label_margin,  # x_size
                self.time_label_font_size,  # y_size
                Qt.AlignCenter,
                time_marker_str)

            if marker_time.hour == 23:
                break

            i += 1
            marker_time = datetime.datetime(year=self.starting_time.year,
                                            month=self.starting_time.month,
                                            day=self.starting_time.day,
                                            hour=self.starting_time.hour + i)

        # Tasks

        qp.setPen(QPen(Qt.black, self.border_size, Qt.SolidLine))
        #qp.setBrush(QBrush(Qt.yellow, Qt.SolidPattern))
        #qp.setBrush(QBrush(QColor("#fcaf3e88"), Qt.SolidPattern))
        qp.setBrush(QBrush(QColor(194, 135, 0, 128), Qt.SolidPattern))

        qp.setFont(task_label_font)

        for task in self.data:
            y_start = self.timeCoordinateMapper(task["start"])
            y_end = self.timeCoordinateMapper(task["end"])
            qp.drawRect(
                self.margin_size + self.time_label_margin,  # x_start
                y_start,  # y_start
                widget_width - 2 * self.margin_size -
                self.time_label_margin,  # x_size
                y_end - y_start)  # y_size

            qp.drawText(
                self.margin_size + self.time_label_margin,  # x_start
                y_start,  # y_start
                widget_width - 2 * self.margin_size -
                self.time_label_margin,  # x_size
                y_end - y_start,  # y_size
                Qt.AlignCenter,
                task["label"])

        # Draw a line to show the current time

        current_time_str = datetime.datetime.now().strftime("%H:%M")
        current_time_y_pos = self.timeCoordinateMapper(current_time_str)

        qp.setPen(QPen(Qt.red, self.border_size, Qt.SolidLine))
        qp.setBrush(QBrush(Qt.red, Qt.SolidPattern))
        qp.drawLine(
            self.margin_size + self.time_label_margin,  # x_start
            current_time_y_pos,  # y_start
            widget_width - self.margin_size,  # x_end
            current_time_y_pos)  # y_end

        # Current time bullet

        bullet_border = 5
        qp.setPen(QPen(Qt.red, bullet_border, Qt.SolidLine))
        qp.setBrush(QBrush(Qt.red, Qt.SolidPattern))
        qp.setRenderHint(
            QPainter.Antialiasing
        )  # <- Set anti-aliasing  See https://wiki.python.org/moin/PyQt/Painting%20and%20clipping%20demonstration

        bullet_radius = 3
        qp.drawEllipse(
            self.margin_size + self.time_label_margin -
            bullet_radius,  # x_start,
            current_time_y_pos - bullet_radius,  # y_start,
            2 * bullet_radius,
            2 * bullet_radius)
示例#40
0
    def drawBackground(self):
        side = min(self.width(), self.height())
        ''' Keep side size an even number by trunkating odd pixel '''
        side &= ~0x01

        gradient = QRadialGradient()

        painter = QPainter(self)

        pen = QPen(Qt.black)
        pen.setWidth(1)
        ''' Initialize painter '''
        painter.setRenderHint(QPainter.Antialiasing)
        painter.translate(self.width() / 2, self.height() / 2)
        painter.scale(side / 256.0, side / 256.0)
        painter.setPen(pen)
        ''' Draw external circle '''
        gradient = QRadialGradient(QPointF(-128, -128), 384,
                                   QPointF(-128, -128))
        gradient.setColorAt(0, QColor(224, 224, 224))
        gradient.setColorAt(1, QColor(28, 28, 28))
        painter.setPen(pen)
        painter.setBrush(QBrush(gradient))

        painter.drawEllipse(QPoint(0, 0), 125, 125)
        ''' Draw inner circle '''
        gradient = QRadialGradient(QPointF(128, 128), 384, QPointF(128, 128))
        gradient.setColorAt(0, QColor(224, 224, 224))
        gradient.setColorAt(1, QColor(28, 28, 28))
        painter.setPen(Qt.NoPen)
        painter.setBrush(QBrush(gradient))
        painter.drawEllipse(QPoint(0, 0), 118, 118)
        ''' Draw inner shield '''
        gradient = QRadialGradient(QPointF(-128, -128), 384,
                                   QPointF(-128, -128))
        gradient.setColorAt(0, QColor(255, 255, 255))
        gradient.setColorAt(1, QColor(224, 224, 224))
        painter.setBrush(gradient)
        painter.setPen(Qt.NoPen)
        painter.drawEllipse(QPoint(0, 0), 115, 115)
        painter.setPen(pen)
        painter.setBrush(Qt.black)
        painter.drawPoint(0, 0)

        line = 10
        ''' Draw scale majorTicks using coords rotation '''
        painter.save()
        painter.setBrush(Qt.black)
        painter.rotate(self.start_angle)
        #          ''' initial angle (first tick) '''
        painter.setBrush(QBrush(Qt.black))
        t_rot = self.stop_angle / (self.minorTicks *
                                   (self.majorTicks - 1) + self.majorTicks - 1)
        for i in range(
                int((self.minorTicks) * (self.majorTicks - 1) +
                    self.majorTicks)):
            if self.minorTicks:
                if (self.minorTicks + 1) == 0:
                    painter.drawLine(QPoint(105, 0), QPoint(105 - line, 0))
                else:
                    painter.drawLine(QPoint(105, 0), QPoint(105 - line / 3, 0))
            else:
                painter.drawLine(QPoint(105, 0), QPoint(105 - line, 0))
            painter.rotate(t_rot)
        painter.restore()
        ''' Draw scale numbers using vector rotation '''
        ''' x' = xcos(a)-ysin(a)                     '''
        ''' y' = xsin(a)-ycos(a)                     '''
        painter.save()
        rotation = (self.start_angle /
                    360) * 2 * pi  #       ''' Initial rotation '''
        painter.setFont(self.digitFont)
        for i in range(int(self.majorTicks)):
            point = QPointF((70 * cos(rotation)), 70 * sin(rotation))
            value = self.scaleFormat.format(self.wmin + i * self.step)
            size = painter.fontMetrics().size(Qt.TextSingleLine, value)
            point.setX(point.x() - size.width() / 2)  #  += int()
            point.setY(point.y() + size.height() / 4)
            painter.drawText(point, value)
            rotation += self.rot_rad

        painter.restore()

        labela = self.labelFormat.format(self.value)
        painter.setFont(self.labelFont)
        point = QPointF()
        size = painter.fontMetrics().size(Qt.TextSingleLine, labela)
        point.setX(point.x() - size.width() / 2)
        point.setY(point.y() + size.height() / 4 + self.labelOffset)
        painter.drawText(point, labela)

        if len(self.label) > 0:  # Draw meter label
            painter.setFont(self.labelFont)
            point = QPointF()
            size = painter.fontMetrics().size(Qt.TextSingleLine, self.label)
            point.setX(point.x() - size.width() / 2)
            point.setY(point.y() + size.height() / 4 + self.labelOffset + 24)
            painter.drawText(point, self.label)
示例#41
0
    def overlay_marks(self, img, is_cseed=False, calibration_sheet=False):
        border_color = Qt.white
        base_img = QImage(self.f_size.width(),self.f_size.height(), QImage.Format_ARGB32)
        base_img.fill(border_color)
        img = QImage(img)

        painter = QPainter()
        painter.begin(base_img)

        total_distance_h = round(base_img.width() / self.abstand_v)
        dist_v = round(total_distance_h) / 2
        dist_h = round(total_distance_h) / 2

        img = img.scaledToWidth(base_img.width() - (2 * (total_distance_h)))
        painter.drawImage(total_distance_h,
                          total_distance_h,
                          img)

        #frame around image
        pen = QPen(Qt.black, 2)
        painter.setPen(pen)

        #horz
        painter.drawLine(0, total_distance_h, base_img.width(), total_distance_h)
        painter.drawLine(0, base_img.height()-(total_distance_h), base_img.width(), base_img.height()-(total_distance_h))
        #vert
        painter.drawLine(total_distance_h, 0,  total_distance_h, base_img.height())
        painter.drawLine(base_img.width()-(total_distance_h), 0,  base_img.width()-(total_distance_h), base_img.height())

        #border around img
        border_thick = 6
        Rpath = QPainterPath()
        Rpath.addRect(QRectF((total_distance_h)+(border_thick/2),
                             (total_distance_h)+(border_thick/2),
                             base_img.width()-((total_distance_h)*2)-((border_thick)-1),
                             (base_img.height()-((total_distance_h))*2)-((border_thick)-1)))
        pen = QPen(Qt.black, border_thick)
        pen.setJoinStyle (Qt.MiterJoin)

        painter.setPen(pen)
        painter.drawPath(Rpath)

        Bpath = QPainterPath()
        Bpath.addRect(QRectF((total_distance_h), (total_distance_h),
                             base_img.width()-((total_distance_h)*2), (base_img.height()-((total_distance_h))*2)))
        pen = QPen(Qt.black, 1)
        painter.setPen(pen)
        painter.drawPath(Bpath)

        pen = QPen(Qt.black, 1)
        painter.setPen(pen)
        painter.drawLine(0, base_img.height()/2, total_distance_h, base_img.height()/2)
        painter.drawLine(base_img.width()/2, 0, base_img.width()/2, total_distance_h)

        painter.drawLine(base_img.width()-total_distance_h, base_img.height()/2, base_img.width(), base_img.height()/2)
        painter.drawLine(base_img.width()/2, base_img.height(), base_img.width()/2, base_img.height() - total_distance_h)

        #print code
        f_size = 37
        QFontDatabase.addApplicationFont(os.path.join(os.path.dirname(__file__), 'DejaVuSansMono-Bold.ttf'))
        font = QFont("DejaVu Sans Mono", f_size-11, QFont.Bold)
        font.setPixelSize(35)
        painter.setFont(font)

        if not calibration_sheet:
            if is_cseed: #its a secret
                painter.setPen(QPen(Qt.black, 1, Qt.DashDotDotLine))
                painter.drawLine(0, dist_v, base_img.width(), dist_v)
                painter.drawLine(dist_h, 0,  dist_h, base_img.height())
                painter.drawLine(0, base_img.height()-dist_v, base_img.width(), base_img.height()-(dist_v))
                painter.drawLine(base_img.width()-(dist_h), 0,  base_img.width()-(dist_h), base_img.height())

                painter.drawImage(((total_distance_h))+11, ((total_distance_h))+11,
                                  QImage(icon_path('electrumb.png')).scaledToWidth(2.1*(total_distance_h), Qt.SmoothTransformation))

                painter.setPen(QPen(Qt.white, border_thick*8))
                painter.drawLine(base_img.width()-((total_distance_h))-(border_thick*8)/2-(border_thick/2)-2,
                                (base_img.height()-((total_distance_h)))-((border_thick*8)/2)-(border_thick/2)-2,
                                base_img.width()-((total_distance_h))-(border_thick*8)/2-(border_thick/2)-2 - 77,
                                (base_img.height()-((total_distance_h)))-((border_thick*8)/2)-(border_thick/2)-2)
                painter.setPen(QColor(0,0,0,255))
                painter.drawText(QRect(0, base_img.height()-107, base_img.width()-total_distance_h - border_thick - 11,
                                       base_img.height()-total_distance_h - border_thick), Qt.AlignRight,
                                 self.versioned_seed.version + '_'+self.versioned_seed.checksum)
                painter.end()

            else: # revealer

                painter.setPen(QPen(border_color, 17))
                painter.drawLine(0, dist_v, base_img.width(), dist_v)
                painter.drawLine(dist_h, 0,  dist_h, base_img.height())
                painter.drawLine(0, base_img.height()-dist_v, base_img.width(), base_img.height()-(dist_v))
                painter.drawLine(base_img.width()-(dist_h), 0,  base_img.width()-(dist_h), base_img.height())

                painter.setPen(QPen(Qt.black, 2))
                painter.drawLine(0, dist_v, base_img.width(), dist_v)
                painter.drawLine(dist_h, 0,  dist_h, base_img.height())
                painter.drawLine(0, base_img.height()-dist_v, base_img.width(), base_img.height()-(dist_v))
                painter.drawLine(base_img.width()-(dist_h), 0,  base_img.width()-(dist_h), base_img.height())
                logo = QImage(icon_path('revealer_c.png')).scaledToWidth(1.3*(total_distance_h))
                painter.drawImage((total_distance_h)+ (border_thick), ((total_distance_h))+ (border_thick), logo, Qt.SmoothTransformation)

                #frame around logo
                painter.setPen(QPen(Qt.black, border_thick))
                painter.drawLine(total_distance_h+border_thick, total_distance_h+logo.height()+3*(border_thick/2),
                                 total_distance_h+logo.width()+border_thick, total_distance_h+logo.height()+3*(border_thick/2))
                painter.drawLine(logo.width()+total_distance_h+3*(border_thick/2), total_distance_h+(border_thick),
                                 total_distance_h+logo.width()+3*(border_thick/2), total_distance_h+logo.height()+(border_thick))

                #frame around code/qr
                qr_size = 179

                painter.drawLine((base_img.width()-((total_distance_h))-(border_thick/2)-2)-qr_size,
                                (base_img.height()-((total_distance_h)))-((border_thick*8))-(border_thick/2)-2,
                                 (base_img.width()/2+(total_distance_h/2)-border_thick-(border_thick*8)/2)-qr_size,
                                (base_img.height()-((total_distance_h)))-((border_thick*8))-(border_thick/2)-2)

                painter.drawLine((base_img.width()/2+(total_distance_h/2)-border_thick-(border_thick*8)/2)-qr_size,
                                (base_img.height()-((total_distance_h)))-((border_thick*8))-(border_thick/2)-2,
                                 base_img.width()/2 + (total_distance_h/2)-border_thick-(border_thick*8)/2-qr_size,
                                 ((base_img.height()-((total_distance_h)))-(border_thick/2)-2))

                painter.setPen(QPen(Qt.white, border_thick * 8))
                painter.drawLine(
                    base_img.width() - ((total_distance_h)) - (border_thick * 8) / 2 - (border_thick / 2) - 2,
                    (base_img.height() - ((total_distance_h))) - ((border_thick * 8) / 2) - (border_thick / 2) - 2,
                    base_img.width() / 2 + (total_distance_h / 2) - border_thick - qr_size,
                    (base_img.height() - ((total_distance_h))) - ((border_thick * 8) / 2) - (border_thick / 2) - 2)

                painter.setPen(QColor(0,0,0,255))
                painter.drawText(QRect(((base_img.width()/2) +21)-qr_size, base_img.height()-107,
                                       base_img.width()-total_distance_h - border_thick -93,
                                       base_img.height()-total_distance_h - border_thick), Qt.AlignLeft, self.versioned_seed.get_ui_string_version_plus_seed())
                painter.drawText(QRect(0, base_img.height()-107, base_img.width()-total_distance_h - border_thick -3 -qr_size,
                                       base_img.height()-total_distance_h - border_thick), Qt.AlignRight, self.versioned_seed.checksum)

                # draw qr code
                qr_qt = self.paintQR(self.versioned_seed.get_ui_string_version_plus_seed()
                                     + self.versioned_seed.checksum)
                target = QRectF(base_img.width()-65-qr_size,
                                base_img.height()-65-qr_size,
                                qr_size, qr_size )
                painter.drawImage(target, qr_qt)
                painter.setPen(QPen(Qt.black, 4))
                painter.drawLine(base_img.width()-65-qr_size,
                                base_img.height()-65-qr_size,
                                 base_img.width() - 65 - qr_size,
                                (base_img.height() - ((total_distance_h))) - ((border_thick * 8)) - (border_thick / 2) - 4
                                 )
                painter.drawLine(base_img.width()-65-qr_size,
                                base_img.height()-65-qr_size,
                                 base_img.width() - 65,
                                base_img.height()-65-qr_size
                                 )
                painter.end()

        else: # calibration only
            painter.end()
            cal_img = QImage(self.f_size.width() + 100, self.f_size.height() + 100,
                              QImage.Format_ARGB32)
            cal_img.fill(Qt.white)

            cal_painter = QPainter()
            cal_painter.begin(cal_img)
            cal_painter.drawImage(0,0, base_img)

            #black lines in the middle of border top left only
            cal_painter.setPen(QPen(Qt.black, 1, Qt.DashDotDotLine))
            cal_painter.drawLine(0, dist_v, base_img.width(), dist_v)
            cal_painter.drawLine(dist_h, 0,  dist_h, base_img.height())

            pen = QPen(Qt.black, 2, Qt.DashDotDotLine)
            cal_painter.setPen(pen)
            n=15

            cal_painter.setFont(QFont("DejaVu Sans Mono", 21, QFont.Bold))
            for x in range(-n,n):
                #lines on bottom (vertical calibration)
                cal_painter.drawLine((((base_img.width())/(n*2)) *(x))+ (base_img.width()/2)-13,
                                 x+2+base_img.height()-(dist_v),
                                 (((base_img.width())/(n*2)) *(x))+ (base_img.width()/2)+13,
                                 x+2+base_img.height()-(dist_v))

                num_pos = 9
                if x > 9 : num_pos = 17
                if x < 0 : num_pos = 20
                if x < -9: num_pos = 27

                cal_painter.drawText((((base_img.width())/(n*2)) *(x))+ (base_img.width()/2)-num_pos,
                                 50+base_img.height()-(dist_v),
                                  str(x))

                #lines on the right (horizontal calibrations)

                cal_painter.drawLine(x+2+(base_img.width()-(dist_h)),
                                 ((base_img.height()/(2*n)) *(x))+ (base_img.height()/n)+(base_img.height()/2)-13,
                                 x+2+(base_img.width()-(dist_h)),
                                 ((base_img.height()/(2*n)) *(x))+ (base_img.height()/n)+(base_img.height()/2)+13)


                cal_painter.drawText(30+(base_img.width()-(dist_h)),
                                ((base_img.height()/(2*n)) *(x))+ (base_img.height()/2)+13, str(x))

            cal_painter.end()
            base_img = cal_img

        return base_img
示例#42
0
    def paintEvent(self, *_):
        """
        This is called on self.update() and on resize - makes resizes a bit ugly.
        This method draws every frame and forms the core of the program.
        """
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing, True)
        painter.translate(self.width() / 2,
                          self.height() / 2)  # Make (0,0) centre

        if self.draw_axes:
            painter.setPen(QPen(QColor(0, 0, 0, 64), 1))
            # Line(x1,y2,x2,y2)
            painter.drawLine(
                QLineF(0,
                       self.height() / 2, 0, -self.height() / 2))
            painter.drawLine(QLineF(self.width() / 2, 0, -self.width() / 2, 0))

        colours = interpolate_hsv(self.col1, self.col2, self.num_dots - 2)
        # self.num_dots slider minimum is 2, so middle num minimum 0 which is ok
        last = None

        for cur_dot_num in range(self.num_dots):
            if self.join_end_dots:
                angle_off = radians(self.angle_factor /
                                    (self.num_dots - 1)) * cur_dot_num
                frame_no = self.frame_no + cur_dot_num * (
                    180 / (self.num_dots - 1)) / self.speedmult
            else:
                angle_off = radians(
                    self.angle_factor / self.num_dots) * cur_dot_num
                frame_no = self.frame_no + cur_dot_num * (
                    180 / self.num_dots) / self.speedmult
            # green = (240/self.num_dots) * (self.num_dots - cur_dot_num)
            # blue = (240/self.num_dots) * cur_dot_num
            # colour = QColor(0, green, blue)
            colour = next(colours).toRgb()
            painter.setPen(QPen(colour))
            painter.setBrush(QBrush(colour))
            # progress = (cos(radians(SPEED_MULT * frame_no)) + 1)/2 * 180
            progress = abs((frame_no * self.speedmult) % (2 * self.halfmax) -
                           self.halfmax)
            # Progress oscillates every 360/speed_mult frames
            # Progress dictates the range of values of x later fed into cos(x)
            # frame_no multiplier dictates frequency of oscillations
            # Progress ranges between 0 and 180 which later gives us a
            # cos(progress) ranging between # 1 and -1, which combines with
            # sometimes-neg wid * hei to give a full range
            # print(self.frame_no,progress)
            height = sin(angle_off) * (self.height() - 100)
            width = cos(angle_off) * (self.width() - 100)
            # (0,0) is the centre
            x = cos(radians(self.x_multiplier * progress)) * width / 2
            y = cos(radians(self.y_multiplier * progress)) * height / 2

            if self.draw_lines:
                painter.setPen(QPen(colour, self.dot_size))
                painter.drawLine(QPointF(x, y), QPointF(0, 0))
                if self.connect_lines:
                    if last:
                        painter.drawLine(QPointF(x, y), last)
                    last = QPointF(x, y)
            else:
                painter.drawEllipse(QPointF(x, y), self.dot_size,
                                    self.dot_size)
示例#43
0
    def paintEvent(self, event):
        # 时钟指针坐标点
        hourPoint = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -30)]
        minPoint = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -65)]
        secPoint = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -80)]
        # 时钟指针颜色
        hourColor = QColor(200, 100, 0, 200)
        minColor = QColor(0, 127, 127, 150)
        secColor = QColor(0, 160, 230, 150)

        side = min(self.width(), self.height())

        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.translate(self.width() / 2,
                          self.height() / 2)  # painter坐标系原点移至widget中央
        painter.scale(side / 200,
                      side / 200)  # 缩放painterwidget坐标系,使绘制的时钟位于widge中央,即钟表支持缩放

        # 绘制小时和分钟刻度线
        painter.save()
        for i in range(0, 60):
            if (i % 5) != 0:
                painter.setPen(minColor)
                painter.drawLine(92, 0, 96, 0)  # 绘制分钟刻度线
            else:
                painter.setPen(hourColor)
                painter.drawLine(88, 0, 96, 0)  # 绘制小时刻度线
            painter.rotate(360 / 60)
        painter.restore()

        # 绘制小时数字
        painter.save()
        font = painter.font()
        font.setBold(True)
        painter.setFont(font)
        pointSize = font.pointSize()
        painter.setPen(hourColor)
        nhour = 0
        radius = 100
        for i in range(0, 12):
            nhour = i + 3  # 按QT-Qpainter的坐标系换算,3小时的刻度线对应坐标轴0度
            if nhour > 12:
                nhour = nhour - 12

            x = radius * 0.8 * cos(i * 30 * pi / 180.0) - pointSize
            y = radius * 0.8 * sin(i * 30 * pi / 180.0) - pointSize / 2.0
            width = pointSize * 2
            height = pointSize
            painter.drawText(QRectF(x, y, width, height), Qt.AlignCenter,
                             str(nhour))
        painter.restore()

        time = QTime.currentTime()

        # 绘制小时指针
        painter.save()
        painter.setPen(Qt.NoPen)  # 无轮廓线
        painter.setBrush(hourColor)  # 填充色
        painter.rotate(30 *
                       (time.hour() +
                        time.minute() / 60))  # 每圈360° = 12h 即:旋转角度 = 小时数 * 30°
        print(time.hour())
        painter.drawConvexPolygon(QPolygonF(hourPoint))
        painter.restore()

        # 绘制分钟指针
        painter.save()
        painter.setPen(Qt.NoPen)  # 无轮廓线
        painter.setBrush(minColor)  # 填充色
        painter.rotate(6 *
                       (time.minute() +
                        time.second() / 60))  # 每圈360° = 60m 即:旋转角度 = 分钟数 * 6°
        painter.drawConvexPolygon(QPolygonF(minPoint))
        painter.restore()

        # 绘制秒钟指针
        painter.save()
        painter.setPen(Qt.NoPen)  # 无轮廓线
        painter.setBrush(secColor)  # 填充色
        painter.rotate(6 * time.second())
        painter.drawConvexPolygon(
            QPolygonF(secPoint))  # 每圈360° = 60s 即:旋转角度 = 秒数 * 6°
        painter.restore()
示例#44
0
class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 600, 600)
        self.setWindowTitle('Drawing home')
        self.width = 175  #default settings
        self.height = 100
        self.roofHeight = 50
        self.mainColor1 = QColor(255, 255, 127)
        self.mainColor2 = QColor(255, 85, 0)
        self.roofColor = QColor(199, 250, 252)
        self.doorColor = QColor(255, 255, 255)
        self.lightColor = QColor(255, 219, 41)
        self.windowStyle = "Round window"
        self.roomNumber = 1

        drawButton = QPushButton(
            "Move cursor here to update the object, if it was not happened",
            self)
        drawButton.setFont(QFont("Comic Sans MS", 11, QFont.Normal))
        drawButton.move(40, 60)
        drawButton.adjustSize()
        #sliders etc.
        self.changeWidth = QSlider(Qt.Horizontal, self)
        self.changeWidth.setFocusPolicy(Qt.NoFocus)
        self.changeWidth.setStyleSheet(sldStyle)  #use our own style!
        self.changeWidth.setGeometry(30, 150, 100, 30)
        self.changeWidth.valueChanged[int].connect(self.changeWidthF)
        self.changeHeight = QSlider(Qt.Horizontal, self)
        self.changeHeight.setFocusPolicy(Qt.NoFocus)
        self.changeHeight.setStyleSheet(sldStyle)
        self.changeHeight.setGeometry(30, 220, 100, 30)
        self.changeHeight.valueChanged[int].connect(self.changeHeightF)
        self.changeRoofHeight = QSlider(Qt.Horizontal, self)
        self.changeRoofHeight.setFocusPolicy(Qt.NoFocus)
        self.changeRoofHeight.setStyleSheet(sldStyle)
        self.changeRoofHeight.setGeometry(30, 290, 100, 30)
        self.changeRoofHeight.valueChanged[int].connect(self.changeRoofHeightF)
        changeWindowStyle = QComboBox(self)
        changeWindowStyle.addItem("Round window")
        changeWindowStyle.addItem("2-part window")
        changeWindowStyle.addItem("No window")
        changeWindowStyle.move(30, 365)
        changeWindowStyle.setFont(QFont("Tahoma", 10, QFont.Normal))
        changeWindowStyle.activated[str].connect(self.changeWindowStyle)
        changeWindowStyle.adjustSize()
        changeIllumination = QCheckBox('Neon Light', self)
        changeIllumination.move(30, 410)
        changeIllumination.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeIllumination.adjustSize()
        changeIllumination.stateChanged.connect(self.changeIllumination)
        changeRoomNumber = QComboBox(self)
        changeRoomNumber.addItem("1")
        changeRoomNumber.addItem("2")
        changeRoomNumber.move(30, 505)
        changeRoomNumber.setFont(QFont("Tahoma", 10, QFont.Normal))
        changeRoomNumber.activated[int].connect(self.changeRoomNumber)
        #labels
        changeW = QLabel("Width", self)
        changeW.move(30, 120)
        changeW.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeH = QLabel("Height", self)
        changeH.move(30, 190)
        changeH.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeRH = QLabel("Roof level", self)
        changeRH.move(30, 260)
        changeRH.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeWS = QLabel("Window style", self)
        changeWS.move(30, 330)
        changeWS.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeWS.adjustSize()
        changeRN = QLabel("Number of rooms", self)
        changeRN.move(30, 450)
        changeRN.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeRN.adjustSize()
        changeRN1 = QLabel("on the 2nd floor", self)
        changeRN1.move(30, 470)
        changeRN1.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeRN1.adjustSize()
        #toolbar actions
        roofColorAction = QAction(QIcon('colorR.png'),
                                  'Change color of the roof', self)
        roofColorAction.triggered.connect(self.changeRoofColor)
        color1Action = QAction(QIcon('color2.png'),
                               'Change color of the upper part', self)
        color1Action.triggered.connect(self.changeColor1)
        color2Action = QAction(QIcon('color1.png'),
                               'Change color of the lower part', self)
        color2Action.triggered.connect(self.changeColor2)
        doorColorAction = QAction(QIcon('colorD.png'),
                                  'Change color of the door', self)
        doorColorAction.triggered.connect(self.changeDoorColor)
        randomizeAction = QAction(QIcon('random.png'), 'Randonize your house',
                                  self)
        randomizeAction.triggered.connect(self.randomize)
        toolbar = self.addToolBar('Menu')
        toolbar.setIconSize(QSize(45, 45))
        toolbar.addAction(roofColorAction)
        toolbar.addAction(color2Action)
        toolbar.addAction(color1Action)
        toolbar.addAction(doorColorAction)
        toolbar.addAction(randomizeAction)

        self.show()

    def paintEvent(self, e):
        #print("paint")
        self.qp = QPainter(self)

        #self.qp.setPen(QColor(245, 245, 245)) #if you need no black circuit
        triangle = QPolygonF([
            QPointF(200, 200),
            QPointF(200 + self.width, 200),
            QPointF(200 + self.width / 2, 200 - self.roofHeight)
        ])
        self.qp.setBrush(QBrush(self.roofColor, Qt.SolidPattern))
        self.qp.drawPolygon(triangle)  #roof
        self.qp.setBrush(QBrush(self.mainColor1, Qt.SolidPattern))
        self.qp.drawRect(200, 200, self.width, self.height)  #upper part
        self.qp.setBrush(QBrush(self.mainColor2, Qt.SolidPattern))
        self.qp.drawRect(200, 200 + self.height, self.width,
                         self.height)  #lower part
        #details
        self.qp.setBrush(QBrush(self.doorColor, Qt.SolidPattern))
        self.qp.drawRect(130 + self.width, 115 + 2 * self.height, 50,
                         80)  #calculate door
        self.qp.setBrush(QBrush(self.lightColor, Qt.SolidPattern))
        self.qp.drawRect(140 + self.width, 125 + 2 * self.height, 30,
                         40)  #window on the door
        self.qp.setBrush(QBrush(QColor(173, 98, 23), Qt.SolidPattern))
        self.qp.drawEllipse(173 + self.width, 160 + 2 * self.height, 4,
                            4)  #door handle
        #variants of the window on the third floor
        self.qp.setBrush(QBrush(self.lightColor, Qt.SolidPattern))
        if self.windowStyle == "Round window":
            diameter = 30 * (self.roofHeight / 50)  #calculate proportion
            if diameter > 45:
                diameter = 45  #limit for normal design
            self.qp.drawEllipse(200 - diameter / 2 + self.width / 2,
                                200 - diameter / 2 - self.roofHeight * 0.45,
                                diameter, diameter)
            self.qp.setPen(QPen(QColor(173, 98, 23), 3,
                                Qt.SolidLine))  #window planks
            self.qp.drawLine(202 - diameter / 2 + self.width / 2,
                             200 - self.roofHeight * 0.45,
                             198 + diameter / 2 + self.width / 2,
                             200 - self.roofHeight * 0.45)
            self.qp.drawLine(200 + self.width / 2,
                             198 + diameter / 2 - self.roofHeight * 0.45,
                             200 + self.width / 2,
                             202 - diameter / 2 - self.roofHeight * 0.45)
        if self.windowStyle == "2-part window":
            left = QPolygonF([
                QPointF(200 + self.width / 3, 195),
                QPointF(197 + self.width / 2, 195),
                QPointF(197 + self.width / 2, 210 - self.roofHeight / 1.04),
                QPointF(200 + self.width / 3, 210 - self.roofHeight / 1.5)
            ])
            self.qp.drawPolygon(left)
            right = QPolygonF([
                QPointF(200 + self.width * 2 / 3, 195),
                QPointF(203 + self.width / 2, 195),
                QPointF(203 + self.width / 2, 210 - self.roofHeight / 1.04),
                QPointF(200 + self.width * 2 / 3, 210 - self.roofHeight / 1.5)
            ])
            self.qp.drawPolygon(right)
        #window on the first floor
        self.qp.setPen(QPen(Qt.black, 1, Qt.SolidLine))
        self.qp.drawRect(210 + 2 / 5 * (self.width - 175),
                         110 + 2 * self.height - 1 / 5 * (self.height - 100),
                         75 + 2 / 5 * (self.width - 175),
                         65 + 1 / 5 * (self.height - 100))
        xc = 210 + 2 / 5 * (self.width - 175) + (75 + 2 / 5 *
                                                 (self.width - 175)) / 2
        yc = 110 + 2 * self.height - 1 / 5 * (self.height -
                                              100) + (65 + 1 / 5 *
                                                      (self.height - 100)) / 2
        xr = 208 + 2 / 5 * (self.width - 175) + 75 + 2 / 5 * (self.width - 175)
        yd = 108 + 2 * self.height - 1 / 5 * (
            self.height - 100) + 65 + 1 / 5 * (self.height - 100)
        self.qp.setPen(QPen(QColor(173, 98, 23), 3, Qt.SolidLine))
        self.qp.drawLine(212 + 2 / 5 * (self.width - 175), yc, xr, yc)
        self.qp.drawLine(xc,
                         112 + 2 * self.height - 1 / 5 * (self.height - 100),
                         xc, yd)
        #windows on the second floor
        self.qp.setPen(QPen(Qt.black, 1, Qt.SolidLine))
        yc = 110 + self.height - 1 / 5 * (self.height - 100)
        yd = 65 + 1 / 5 * (
            self.height - 100
        )  #use our previous variables to make arguments shorter
        if self.roomNumber == 1:
            self.qp.drawRect(200 + self.width * 0.2, yc, self.width * 0.6, yd)
            self.qp.setPen(QPen(QColor(173, 98, 23), 3, Qt.SolidLine))
            self.qp.drawLine(200 + self.width * 0.4, yc + 2,
                             200 + self.width * 0.4, yc + yd - 2)
            self.qp.drawLine(200 + self.width * 0.6, yc + 2,
                             200 + self.width * 0.6, yc + yd - 2)
        if self.roomNumber == 2:
            self.qp.drawRect(200 + self.width * 0.1, yc, self.width * 0.35, yd)
            self.qp.drawRect(200 + self.width * 0.55, yc, self.width * 0.35,
                             yd)
            self.qp.setPen(QPen(QColor(173, 98, 23), 3, Qt.SolidLine))
            self.qp.drawLine(200 + self.width * 0.275, yc + 2,
                             200 + self.width * 0.275, yc + yd - 2)
            self.qp.drawLine(200 + self.width * 0.725, yc + 2,
                             200 + self.width * 0.725, yc + yd - 2)

        self.qp.end()
        self.update()  #need to draw again our image

    def changeRoofColor(self):
        roofColor = QColorDialog.getColor()
        if roofColor.isValid():
            self.roofColor = roofColor

    def changeColor1(self):
        mainColor1 = QColorDialog.getColor()
        if mainColor1.isValid():
            self.mainColor1 = mainColor1

    def changeColor2(self):
        mainColor2 = QColorDialog.getColor()
        if mainColor2.isValid():
            self.mainColor2 = mainColor2

    def changeDoorColor(self):
        doorColor = QColorDialog.getColor()
        if doorColor.isValid():
            self.doorColor = doorColor

    def changeWidthF(self, value):
        #print("changed to " + str(value + 150))
        self.width = value + 175

    def changeHeightF(self, value):
        self.height = value / 2 + 100  #keep in mind max and min value of each characteristic

    def changeRoofHeightF(self, value):
        self.roofHeight = value / 2 + 50

    def changeWindowStyle(self, text):
        self.windowStyle = text

    def changeIllumination(self, state):
        if state == Qt.Checked:
            self.lightColor = QColor(229, 101, 157)  #purple
        else:
            self.lightColor = QColor(255, 219, 41)  #orange

    def changeRoomNumber(self, text):
        self.roomNumber = int(text) + 1

    def randomize(self):
        self.width = r.randint(175, 275)
        self.changeWidth.setValue(self.width - 175)
        self.height = r.randint(100, 150)
        self.changeHeight.setValue(self.height - 100)
        self.roofHeight = r.randint(50, 100)
        self.changeRoofHeight.setValue(self.roofHeight - 50)
        self.mainColor1 = QColor(r.randint(0, 255), r.randint(0, 255),
                                 r.randint(0, 255))
        self.mainColor2 = QColor(r.randint(0, 255), r.randint(0, 255),
                                 r.randint(0, 255))
        self.roofColor = QColor(r.randint(0, 255), r.randint(0, 255),
                                r.randint(0, 255))
        self.doorColor = QColor(r.randint(0, 255), r.randint(0, 255),
                                r.randint(0, 255))
示例#45
0
    def show_network(self, painter: QtGui.QPainter):
        painter.setRenderHints(QtGui.QPainter.Antialiasing)
        painter.setRenderHints(QtGui.QPainter.HighQualityAntialiasing)
        painter.setRenderHint(QtGui.QPainter.TextAntialiasing)
        painter.setRenderHint(QtGui.QPainter.SmoothPixmapTransform)
        vertical_space = 4.5  ################ chỉnh đồ hoạ mạng noron
        radius = 4.5
        height = self.frameGeometry().height()
        width = self.frameGeometry().width()
        layer_nodes = self.snake.network.layer_nodes

        default_offset = 30
        h_offset = default_offset
        inputs = self.snake.vision_as_array
        out = self.snake.network.feed_forward(
            inputs)  # @TODO: không cần điều này
        max_out = np.argmax(out)

        # Vẽ nodes
        for layer, num_nodes in enumerate(layer_nodes):
            v_offset = (height -
                        ((2 * radius + vertical_space) * num_nodes)) / 2
            activations = None
            if layer > 0:
                activations = self.snake.network.params['A' + str(layer)]

            for node in range(num_nodes):
                x_loc = h_offset
                y_loc = node * (radius * 2 + vertical_space) + v_offset
                t = (layer, node)
                if t not in self.neuron_locations:
                    self.neuron_locations[t] = (x_loc, y_loc + radius)

                painter.setBrush(QtGui.QBrush(Qt.white, Qt.NoBrush))
                # Input layer
                if layer == 0:
                    # Có một giá trị được cho nuôi trong
                    if inputs[node, 0] > 0:
                        painter.setBrush(QtGui.QBrush(
                            Qt.black))  ########### mới sửa từ màu  blue
                    else:
                        painter.setBrush(QtGui.QBrush(Qt.white))
                # Lớp giữa
                elif layer > 0 and layer < len(layer_nodes) - 1:
                    try:
                        saturation = max(min(activations[node, 0], 1.0), 0.0)
                    except:
                        print(self.snake.network.params)
                        import sys
                        sys.exit(-1)
                    painter.setBrush(
                        QtGui.QBrush(
                            QtGui.QColor.fromHslF(125 / 239, saturation,
                                                  120 / 240)))
                # Lớp ra
                elif layer == len(layer_nodes) - 1:
                    text = ('U', 'D', 'L', 'R')[node]
                    painter.drawText(
                        h_offset + 30,
                        node * (radius * 2 + vertical_space) + v_offset +
                        1.5 * radius, text)
                    if node == max_out:
                        painter.setBrush(QtGui.QBrush(
                            Qt.green))  ########### đúng ra là blue
                    else:
                        painter.setBrush(QtGui.QBrush(Qt.white))

                painter.drawEllipse(x_loc, y_loc, radius * 2, radius * 2)
            h_offset += 150

        # Đặt lại bù ngang cho các trọng số
        h_offset = default_offset

        # Vẽ trọng lượng
        # Đối với mỗi lớp bắt đầu từ 1
        for l in range(1, len(layer_nodes)):
            weights = self.snake.network.params['W' + str(l)]
            prev_nodes = weights.shape[1]
            curr_nodes = weights.shape[0]
            # Đối với mỗi nút từ lớp trước
            for prev_node in range(prev_nodes):
                # Đối với tất cả các nút hiện tại, hãy kiểm tra xem trọng số là gì
                for curr_node in range(curr_nodes):
                    # Nếu có trọng lượng dương, làm cho đường màu xanh lá cây
                    if weights[curr_node, prev_node] > 0:
                        painter.setPen(QtGui.QPen(Qt.green))
                    # Nếu có trọng lượng âm (cản trở), làm cho đường màu đỏ
                    else:
                        painter.setPen(QtGui.QPen(Qt.red))
                    # Lấy vị trí của các nút
                    start = self.neuron_locations[(l - 1, prev_node)]
                    end = self.neuron_locations[(l, curr_node)]
                    # Offset bắt đầu [0] theo đường kính của vòng tròn để đường bắt đầu ở bên phải của vòng tròn
                    painter.drawLine(start[0] + radius * 2, start[1], end[0],
                                     end[1])
示例#46
0
    def drawValues(self, qp: QtGui.QPainter):
        if len(self.data) == 0 and len(self.reference) == 0:
            return
        pen = QtGui.QPen(self.sweepColor)
        pen.setWidth(self.pointSize)
        line_pen = QtGui.QPen(self.sweepColor)
        line_pen.setWidth(self.lineThickness)
        highlighter = QtGui.QPen(QtGui.QColor(20, 0, 255))
        highlighter.setWidth(1)
        if not self.fixedSpan:
            if len(self.data) > 0:
                fstart = self.data[0].freq
                fstop = self.data[len(self.data)-1].freq
            else:
                fstart = self.reference[0].freq
                fstop = self.reference[len(self.reference) - 1].freq
            self.fstart = fstart
            self.fstop = fstop
        else:
            fstart = self.fstart = self.minFrequency
            fstop = self.fstop = self.maxFrequency

        # Draw bands if required
        if self.bands.enabled:
            self.drawBands(qp, fstart, fstop)

        if self.fixedValues:
            maxValue = self.maxDisplayValue / 10e11
            minValue = self.minDisplayValue / 10e11
            self.maxValue = maxValue
            self.minValue = minValue
        else:
            # Find scaling
            minValue = 1
            maxValue = -1
            for d in self.data:
                val = d.capacitiveEquivalent()
                if val > maxValue:
                    maxValue = val
                if val < minValue:
                    minValue = val
            for d in self.reference:  # Also check min/max for the reference sweep
                if d.freq < self.fstart or d.freq > self.fstop:
                    continue
                val = d.capacitiveEquivalent()
                if val > maxValue:
                    maxValue = val
                if val < minValue:
                    minValue = val
            self.maxValue = maxValue
            self.minValue = minValue

        span = maxValue - minValue
        if span == 0:
            logger.info("Span is zero for CapacitanceChart, setting to a small value.")
            span = 1e-15
        self.span = span

        target_ticks = math.floor(self.chartHeight / 60)
        fmt = Format(max_nr_digits=1)
        for i in range(target_ticks):
            val = minValue + (i / target_ticks) * span
            y = self.topMargin + round((self.maxValue - val) / self.span * self.chartHeight)
            qp.setPen(self.textColor)
            if val != minValue:
                valstr = str(Value(val, fmt=fmt))
                qp.drawText(3, y + 3, valstr)
            qp.setPen(QtGui.QPen(self.foregroundColor))
            qp.drawLine(self.leftMargin - 5, y, self.leftMargin + self.chartWidth, y)

        qp.setPen(QtGui.QPen(self.foregroundColor))
        qp.drawLine(self.leftMargin - 5, self.topMargin,
                    self.leftMargin + self.chartWidth, self.topMargin)
        qp.setPen(self.textColor)
        qp.drawText(3, self.topMargin + 4, str(Value(maxValue, fmt=fmt)))
        qp.drawText(3, self.chartHeight+self.topMargin, str(Value(minValue, fmt=fmt)))
        self.drawFrequencyTicks(qp)

        self.drawData(qp, self.data, self.sweepColor)
        self.drawData(qp, self.reference, self.referenceColor)
        self.drawMarkers(qp)
示例#47
0
 def paintEvent(self, event):
     qp = QPainter()
     qp.begin(self)
     qp.drawLine(self.pos1[0], self.pos1[1], self.pos2[0], self.pos2[1])
     qp.end()
示例#48
0
    def paintEvent(self, event):
        self.topLabel.setText(self.text)
        qp = QPainter()
        qp.begin(self)

        qp.setPen(QPen(QBrush(Qt.black), 5))
        qp.setFont(QFont('Times', 16))

        if self.settingScreen == False:
            qp.drawLine(
                QLine(self.rod_Xcoord, self.rod_Ycoord,
                      self.circle_Xcoord + 25, self.circle_Ycoord + 25))
            qp.setBrush(QBrush(Qt.black, Qt.SolidPattern))
            qp.drawEllipse(self.circle_Xcoord, self.circle_Ycoord, 50, 50)

        for item in buttonList:
            item.draw(qp)

        if self.settingScreen == False:
            if self.massScreen == True:
                qp.setPen(QPen(QBrush(Qt.blue), 2))
                qp.setBrush(QBrush(Qt.blue))
                qp.drawRect(75, W_HEIGHT - 70, 100, 10)
                qp.setPen(QPen(QBrush(Qt.black), 2))
                qp.drawRect(75, W_HEIGHT - 70, 100, 10)
                drawNextMassY = W_HEIGHT - 70
                for item in self.massArray:
                    qp.setBrush(QBrush(Qt.gray))
                    if item == 1:
                        height = 6
                    elif item == 10:
                        height = 15
                    elif item == 20:
                        height = 30
                    else:
                        height = 45
                    qp.drawRect(85, drawNextMassY - (height), 80, height)
                    drawNextMassY = drawNextMassY - (height)
                    qp.drawText(90, W_HEIGHT - 30,
                                'Mass: ' + str(self.mass) + ' g')
        else:
            qp.setPen(QPen(QBrush(Qt.black), 3))
            qp.drawText(150, 400, 'Period: ' + str(self.period) + ' s')
            if self.calc != None:
                qp.drawText(200, 150, str(self.calc))

        if self.displayResults == True:
            qp.setPen(QPen(QBrush(Qt.black), 2))
            if self.force == 0:
                qp.drawText(125, 250, 'Calculating...')
            else:
                if isinstance(self.force, str) == False:
                    qp.drawText(
                        125, 250, 'Centripetal Force: ' +
                        str(round(self.force, 2)) + ' N')
                    qp.drawText(125, 300, 'Mass: ' + str(self.mass) + ' g')
                    qp.drawText(125, 350, 'Period: ' + str(self.period) + ' s')
                else:

                    qp.drawText(125, 250, 'Centripetal Force: ' + self.force)
                    qp.drawText(125, 300, 'Mass: ' + str(self.mass) + ' g')
示例#49
0
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.n = 1
        self.filename = QFileDialog.getOpenFileName(self,
                                                    'Выбрать файл L-системы',
                                                    '/')[0]
        self.initUI()

    def initUI(self):
        self.setGeometry(500, 500, *SCREEN_SIZE)
        self.setWindowTitle('L - системы')
        self.flag = False
        self.slider = QSlider(Qt.Horizontal, self)
        self.slider.move(25, 480)
        self.slider.valueChanged.connect(self.draw)
        self.slider.setMinimum(1)
        self.slider.setMaximum(10)
        self.slider.setFixedWidth(450)
        self.show()

    def draw(self, value):
        self.flag = True
        self.n = value
        qp = QPainter()
        qp.begin(self)
        self.qp = QPainter()
        self.qp.begin(self)
        self.drawL()
        self.qp.end()
        qp.end()
        self.update()
        self.show()

    def paintEvent(self, e):
        if self.flag:
            qp = QPainter()
            qp.begin(self)
            self.qp = QPainter()
            self.qp.begin(self)
            self.drawL()
            self.qp.end()
            qp.end()

    def moveto(self, x, y):
        self.graph_pos[0] = x
        self.graph_pos[1] = y

    def lineto(self, x, y):
        self.qp.drawLine(*self.graph_pos, int(x), int(y))
        self.graph_pos[0] = int(x)
        self.graph_pos[1] = int(y)

    # Построение L-системы по L-строке
    def plotlsystem(self, lstring):
        for ch in lstring:
            if ch == "F":
                self.POSITION[0] += self.step * cos(radians(self.POSITION[2]))
                self.POSITION[1] += self.step * sin(radians(self.POSITION[2]))
                self.lineto(xs(self.POSITION[0]), ys(self.POSITION[1]))
            elif ch == "f":
                self.POSITION[0] += self.step * cos(radians(self.POSITION[2]))
                self.POSITION[1] += self.step * sin(radians(self.POSITION[2]))
                self.lineto(xs(self.POSITION[0]), ys(self.POSITION[1]))
            elif ch == "-":
                self.POSITION[2] += LSystem["ANGLE"]
            elif ch == "+":
                self.POSITION[2] -= LSystem["ANGLE"]
            elif ch == "[":
                STACK.append(self.POSITION[:])
            elif ch == "]":
                if STACK:
                    self.POSITION[0], self.POSITION[1], self.POSITION[
                        2] = STACK.pop(-1)
                    self.moveto(xs(self.POSITION[0]), ys(self.POSITION[1]))

    def drawL(self):
        readlsystem(self.filename)
        x, y = 0, 0
        self.step = 20
        self.POSITION = [x, y, 0]
        self.graph_pos = [xs(x), xs(y)]
        self.plotlsystem(buildlsystem(self.n))
示例#50
0
class _ContentGame(QWidget):
    def __init__(self, app, parent=None):
        super().__init__(parent=parent)
        self.app = app
        self.game = app.game

        self.cellsize = min(app.width() // self.game.width,
                            app.height() // self.game.height)
        self.cellsize3 = self.cellsize // 3
        self.cellsize4 = self.cellsize // 4
        self.setFixedSize(self.cellsize * self.game.width,
                          self.cellsize * self.game.height)
        self.cellsize6 = self.cellsize // 6
        self.cellsize23 = self.cellsize3 * 2
        self.cellsize34 = self.cellsize4 * 3
        self.qp = QPainter()

    def paint_cell(self, i, j):
        self.qp.drawRect(j * self.cellsize, i * self.cellsize, self.cellsize,
                         self.cellsize)

    def paint_flag(self, i, j):
        self.qp.drawRect(j * self.cellsize + self.cellsize3,
                         i * self.cellsize + self.cellsize3, self.cellsize3,
                         self.cellsize3)

    def paint_winning_cell(self, i, j):
        self.qp.drawRect(j * self.cellsize,
                         (i + 1) * self.cellsize - self.cellsize4,
                         self.cellsize, self.cellsize4)

    def paint_grid(self):
        self.qp.setPen(Qt.black)
        for i in range(self.game.height):
            self.qp.drawLine(0, i * self.cellsize, self.height(),
                             i * self.cellsize)
        for i in range(self.game.width):
            self.qp.drawLine(i * self.cellsize, 0, i * self.cellsize,
                             self.width())

    def set_cell_color(self, i, j):
        celltype = self.game.map[i][j]
        if celltype == game.EMPTY:
            self.qp.setBrush(Qt.lightGray)
        elif celltype == game.BLOCK:
            self.qp.setBrush(Qt.darkGray)
        elif celltype in game.TYPE1:
            self.qp.setBrush(Qt.green)
        elif celltype in game.TYPE2:
            self.qp.setBrush(Qt.blue)
        elif celltype in game.TYPE3:
            self.qp.setBrush(Qt.yellow)
        elif celltype in game.TYPE4:
            self.qp.setBrush(Qt.red)

    def paint_field(self):
        self.qp.setPen(Qt.black)
        for i in range(self.game.height):
            for j in range(self.game.width):
                self.set_cell_color(i, j)
                self.paint_cell(i, j)

    def paint_flags(self):
        for i in range(self.game.height):
            for j in range(self.game.width):
                if self.game.map[i][j] in game.WHITE_FIGURES:
                    self.qp.setBrush(Qt.white)
                    self.paint_flag(i, j)
                if self.game.map[i][j] in game.BLACK_FIGURES:
                    self.qp.setBrush(Qt.black)
                    self.paint_flag(i, j)

    def paint_winning_position(self):
        self.qp.setBrush(Qt.white)
        for i, j in self.game.white_winning_position:
            self.paint_winning_cell(i, j)
        self.qp.setBrush(Qt.black)
        for i, j in self.game.black_winning_position:
            self.paint_winning_cell(i, j)

    def mousePressEvent(self, event):
        i, j = self.pressed_cell(event)
        result = self.game.press_cell(i, j)
        self.repaint()
        self.app.handle_press_cell(result)

    def pressed_cell(self, event):
        pos = event.pos()
        return pos.y() // self.cellsize, pos.x() // self.cellsize

    def paint_selected_cell(self):
        i, j = self.game.selected_cell
        self.set_cell_color(i, j)
        self.qp.drawRect(j * self.cellsize - self.cellsize6,
                         i * self.cellsize - self.cellsize6,
                         self.cellsize + self.cellsize3,
                         self.cellsize + self.cellsize3)

    def paint_available_move(self, i, j):
        self.qp.drawRect(j * self.cellsize + self.cellsize6,
                         i * self.cellsize + self.cellsize6, self.cellsize23,
                         self.cellsize23)

    def paint_available_moves(self):
        for i, j in self.game.available_moves:
            self.paint_available_move(i, j)

    def paintEvent(self, event):
        self.qp.begin(self)
        self.paint_grid()
        self.paint_field()
        self.paint_winning_position()
        if self.game.selected_cell:
            self.paint_selected_cell()
            self.paint_available_moves()
        self.paint_flags()
        self.qp.end()
示例#51
0
    def drawValues(self, qp: QtGui.QPainter):
        if len(self.data) == 0 and len(self.reference) == 0:
            return
        pen = QtGui.QPen(self.sweepColor)
        pen.setWidth(self.pointSize)
        line_pen = QtGui.QPen(self.sweepColor)
        line_pen.setWidth(self.lineThickness)
        highlighter = QtGui.QPen(QtGui.QColor(20, 0, 255))
        highlighter.setWidth(1)
        if self.fixedSpan:
            fstart = self.minFrequency
            fstop = self.maxFrequency
        else:
            if len(self.data) > 0:
                fstart = self.data[0].freq
                fstop = self.data[len(self.data) - 1].freq
            else:
                fstart = self.reference[0].freq
                fstop = self.reference[len(self.reference) - 1].freq
        self.fstart = fstart
        self.fstop = fstop

        # Draw bands if required
        if self.bands.enabled:
            self.drawBands(qp, fstart, fstop)

        # Find scaling
        if self.fixedValues:
            min_real = self.minDisplayReal
            max_real = self.maxDisplayReal
            min_imag = self.minDisplayImag
            max_imag = self.maxDisplayImag
        else:
            min_real = 1000
            min_imag = 1000
            max_real = 0
            max_imag = -1000
            for d in self.data:
                imp = d.impedance()
                re, im = imp.real, imp.imag
                if re > max_real:
                    max_real = re
                if re < min_real:
                    min_real = re
                if im > max_imag:
                    max_imag = im
                if im < min_imag:
                    min_imag = im
            for d in self.reference:  # Also check min/max for the reference sweep
                if d.freq < fstart or d.freq > fstop:
                    continue
                imp = d.impedance()
                re, im = imp.real, imp.imag
                if re > max_real:
                    max_real = re
                if re < min_real:
                    min_real = re
                if im > max_imag:
                    max_imag = im
                if im < min_imag:
                    min_imag = im

            # Always have at least 8 numbered horizontal lines
            max_real = max(8, math.ceil(max_real))
            min_real = max(
                0, math.floor(min_real))  # Negative real resistance? No.
            max_imag = math.ceil(max_imag)
            min_imag = math.floor(min_imag)

            if max_imag - min_imag < 8:
                missing = 8 - (max_imag - min_imag)
                max_imag += math.ceil(missing / 2)
                min_imag -= math.floor(missing / 2)

            if 0 > max_imag > -2:
                max_imag = 0
            if 0 < min_imag < 2:
                min_imag = 0

            if (max_imag - min_imag) > 8 and min_imag < 0 < max_imag:
                # We should show a "0" line for the reactive part
                span = max_imag - min_imag
                step_size = span / 8
                if max_imag < step_size:
                    # The 0 line is the first step after the top. Scale accordingly.
                    max_imag = -min_imag / 7
                elif -min_imag < step_size:
                    # The 0 line is the last step before the bottom. Scale accordingly.
                    min_imag = -max_imag / 7
                else:
                    # Scale max_imag to be a whole factor of min_imag
                    num_min = math.floor(min_imag / step_size * -1)
                    num_max = 8 - num_min
                    max_imag = num_max * (min_imag / num_min) * -1

        self.max_real = max_real
        self.max_imag = max_imag

        span_real = max_real - min_real
        if span_real == 0:
            span_real = 0.01
        self.span_real = span_real

        span_imag = max_imag - min_imag
        if span_imag == 0:
            span_imag = 0.01
        self.span_imag = span_imag

        # We want one horizontal tick per 50 pixels, at most
        horizontal_ticks = math.floor(self.chartHeight / 50)

        for i in range(horizontal_ticks):
            y = self.topMargin + round(i * self.chartHeight / horizontal_ticks)
            qp.setPen(QtGui.QPen(self.foregroundColor))
            qp.drawLine(self.leftMargin - 5, y,
                        self.leftMargin + self.chartWidth + 5, y)
            qp.setPen(QtGui.QPen(self.textColor))
            re = max_real - i * span_real / horizontal_ticks
            im = max_imag - i * span_imag / horizontal_ticks
            qp.drawText(3, y + 4, str(round(re, 1)))
            qp.drawText(self.leftMargin + self.chartWidth + 8, y + 4,
                        str(round(im, 1)))

        qp.drawText(3, self.chartHeight + self.topMargin,
                    str(round(min_real, 1)))
        qp.drawText(self.leftMargin + self.chartWidth + 8,
                    self.chartHeight + self.topMargin, str(round(min_imag, 1)))

        self.drawFrequencyTicks(qp)

        primary_pen = pen
        secondary_pen = QtGui.QPen(self.secondarySweepColor)
        if len(self.data) > 0:
            c = QtGui.QColor(self.sweepColor)
            c.setAlpha(255)
            pen = QtGui.QPen(c)
            pen.setWidth(2)
            qp.setPen(pen)
            qp.drawLine(20, 9, 25, 9)
            c = QtGui.QColor(self.secondarySweepColor)
            c.setAlpha(255)
            pen.setColor(c)
            qp.setPen(pen)
            qp.drawLine(self.leftMargin + self.chartWidth, 9,
                        self.leftMargin + self.chartWidth + 5, 9)

        primary_pen.setWidth(self.pointSize)
        secondary_pen.setWidth(self.pointSize)
        line_pen.setWidth(self.lineThickness)

        for i in range(len(self.data)):
            x = self.getXPosition(self.data[i])
            y_re = self.getReYPosition(self.data[i])
            y_im = self.getImYPosition(self.data[i])
            qp.setPen(primary_pen)
            if self.isPlotable(x, y_re):
                qp.drawPoint(x, y_re)
            qp.setPen(secondary_pen)
            if self.isPlotable(x, y_im):
                qp.drawPoint(x, y_im)
            if self.drawLines and i > 0:
                prev_x = self.getXPosition(self.data[i - 1])
                prev_y_re = self.getReYPosition(self.data[i - 1])
                prev_y_im = self.getImYPosition(self.data[i - 1])

                # Real part first
                line_pen.setColor(self.sweepColor)
                qp.setPen(line_pen)
                if self.isPlotable(x, y_re) and self.isPlotable(
                        prev_x, prev_y_re):
                    qp.drawLine(x, y_re, prev_x, prev_y_re)
                elif self.isPlotable(
                        x, y_re) and not self.isPlotable(prev_x, prev_y_re):
                    new_x, new_y = self.getPlotable(x, y_re, prev_x, prev_y_re)
                    qp.drawLine(x, y_re, new_x, new_y)
                elif not self.isPlotable(x, y_re) and self.isPlotable(
                        prev_x, prev_y_re):
                    new_x, new_y = self.getPlotable(prev_x, prev_y_re, x, y_re)
                    qp.drawLine(prev_x, prev_y_re, new_x, new_y)

                # Imag part second
                line_pen.setColor(self.secondarySweepColor)
                qp.setPen(line_pen)
                if self.isPlotable(x, y_im) and self.isPlotable(
                        prev_x, prev_y_im):
                    qp.drawLine(x, y_im, prev_x, prev_y_im)
                elif self.isPlotable(
                        x, y_im) and not self.isPlotable(prev_x, prev_y_im):
                    new_x, new_y = self.getPlotable(x, y_im, prev_x, prev_y_im)
                    qp.drawLine(x, y_im, new_x, new_y)
                elif not self.isPlotable(x, y_im) and self.isPlotable(
                        prev_x, prev_y_im):
                    new_x, new_y = self.getPlotable(prev_x, prev_y_im, x, y_im)
                    qp.drawLine(prev_x, prev_y_im, new_x, new_y)

        primary_pen.setColor(self.referenceColor)
        line_pen.setColor(self.referenceColor)
        secondary_pen.setColor(self.secondaryReferenceColor)
        qp.setPen(primary_pen)
        if len(self.reference) > 0:
            c = QtGui.QColor(self.referenceColor)
            c.setAlpha(255)
            pen = QtGui.QPen(c)
            pen.setWidth(2)
            qp.setPen(pen)
            qp.drawLine(20, 14, 25, 14)
            c = QtGui.QColor(self.secondaryReferenceColor)
            c.setAlpha(255)
            pen = QtGui.QPen(c)
            pen.setWidth(2)
            qp.setPen(pen)
            qp.drawLine(self.leftMargin + self.chartWidth, 14,
                        self.leftMargin + self.chartWidth + 5, 14)

        for i in range(len(self.reference)):
            if self.reference[i].freq < fstart or self.reference[
                    i].freq > fstop:
                continue
            x = self.getXPosition(self.reference[i])
            y_re = self.getReYPosition(self.reference[i])
            y_im = self.getImYPosition(self.reference[i])
            qp.setPen(primary_pen)
            if self.isPlotable(x, y_re):
                qp.drawPoint(x, y_re)
            qp.setPen(secondary_pen)
            if self.isPlotable(x, y_im):
                qp.drawPoint(x, y_im)
            if self.drawLines and i > 0:
                prev_x = self.getXPosition(self.reference[i - 1])
                prev_y_re = self.getReYPosition(self.reference[i - 1])
                prev_y_im = self.getImYPosition(self.reference[i - 1])

                line_pen.setColor(self.referenceColor)
                qp.setPen(line_pen)
                # Real part first
                if self.isPlotable(x, y_re) and self.isPlotable(
                        prev_x, prev_y_re):
                    qp.drawLine(x, y_re, prev_x, prev_y_re)
                elif self.isPlotable(
                        x, y_re) and not self.isPlotable(prev_x, prev_y_re):
                    new_x, new_y = self.getPlotable(x, y_re, prev_x, prev_y_re)
                    qp.drawLine(x, y_re, new_x, new_y)
                elif not self.isPlotable(x, y_re) and self.isPlotable(
                        prev_x, prev_y_re):
                    new_x, new_y = self.getPlotable(prev_x, prev_y_re, x, y_re)
                    qp.drawLine(prev_x, prev_y_re, new_x, new_y)

                line_pen.setColor(self.secondaryReferenceColor)
                qp.setPen(line_pen)
                # Imag part second
                if self.isPlotable(x, y_im) and self.isPlotable(
                        prev_x, prev_y_im):
                    qp.drawLine(x, y_im, prev_x, prev_y_im)
                elif self.isPlotable(
                        x, y_im) and not self.isPlotable(prev_x, prev_y_im):
                    new_x, new_y = self.getPlotable(x, y_im, prev_x, prev_y_im)
                    qp.drawLine(x, y_im, new_x, new_y)
                elif not self.isPlotable(x, y_im) and self.isPlotable(
                        prev_x, prev_y_im):
                    new_x, new_y = self.getPlotable(prev_x, prev_y_im, x, y_im)
                    qp.drawLine(prev_x, prev_y_im, new_x, new_y)

        # Now draw the markers
        for m in self.markers:
            if m.location != -1:
                x = self.getXPosition(self.data[m.location])
                y_re = self.getReYPosition(self.data[m.location])
                y_im = self.getImYPosition(self.data[m.location])

                self.drawMarker(x, y_re, qp, m.color,
                                self.markers.index(m) + 1)
                self.drawMarker(x, y_im, qp, m.color,
                                self.markers.index(m) + 1)
示例#52
0
    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        pen = QPen(Qt.black, 5, Qt.SolidLine)
        painter.setPen(pen)
        if len(self.pos_xy) > 1:
            point_start = self.pos_xy[0]
            for pos_tmp in self.pos_xy:
                point_end = pos_tmp

                if point_end == (-1, -1):
                    point_start = (-1, -1)
                    continue
                if point_start == (-1, -1):
                    point_start = point_end
                    continue

                painter.drawLine(point_start[0], point_start[1], point_end[0],
                                 point_end[1])
                point_start = point_end

        pen = QPen(Qt.blue, 2, Qt.DotLine)
        painter.setPen(pen)
        strokeLength = 0

        if len(self.pos_xy_future) > 1:
            point_start = self.pos_xy_future[0]
            for pos_tmp in self.pos_xy_future:
                point_end = pos_tmp

                if point_end[0] == -1:
                    point_start = (-1, -1)
                    continue
                if point_start[0] == -1:
                    point_start = point_end
                    continue
                if point_end[0] == 0 or point_start[0] == 0:
                    continue

                painter.drawLine(point_start[0], point_start[1], point_end[0],
                                 point_end[1])
                strokeLength += np.sqrt((point_start[0] - point_end[0])**2 +
                                        (point_start[1] - point_end[1])**2)
                if (self.config_limitRNNStroke
                        and strokeLength > self.config_RNNStrokeLimit):
                    break
                point_start = point_end

        pen = QPen(Qt.black, 5, Qt.SolidLine)
        painter.setPen(pen)
        if len(self.pos_xy) > 1:
            point_start = self.pos_xy[0]
            for pos_tmp in self.pos_xy:
                point_end = pos_tmp

                if point_end == (-1, -1):
                    point_start = (-1, -1)
                    continue
                if point_start == (-1, -1):
                    point_start = point_end
                    continue

                painter.drawLine(point_start[0], point_start[1], point_end[0],
                                 point_end[1])
                point_start = point_end

        painter.end()
示例#53
0
    def delauney_triangulation(self):
        # result delaunay array and keypoints for intermediate (adjustment) image
        self.delaunay = []
        self.keypoints3 = []

        # ensure keypoints have been filled, and have the same number between images
        if len(self.keypoint1) != len(self.keypoint2) or len(self.keypoint1) <= 3:
            warning = QWidget()
            QMessageBox.warning(warning, "Message", "Must have same number of key points and at least four!")
        else:
            # generate average points between two, and the delaunay triangle for the result
            for i in range(len(self.keypoint1)):
                x = int((self.keypoint1[i][0] + self.keypoint2[i][0]) / 2)
                y = int((self.keypoint1[i][1] + self.keypoint2[i][1]) / 2)

                # add the resulting keypoints to the intermediate array
                self.keypoint3.append([x, y])

            # generate the delaunay triangles based on the new keypoints (library functions using generated keypoints)
            tri = Delaunay(self.keypoint3, False, False, qhull_options = "QJ")
            self.delaunay = tri.simplices

            # draw lines for the triangulation on image 1
            self.image1.setPixmap(QPixmap.fromImage(self.outFeed1))
            self.image1.setAlignment(Qt.AlignCenter)
            painterInstance = QPainter(self.outFeed1)
            penRectangle = QPen(Qt.red)
            painterInstance.setPen(penRectangle)
            for i in range(len(self.delaunay)):
                painterInstance.drawLine(self.keypoint1[self.delaunay[i][0]][0], self.keypoint1[self.delaunay[i][0]][1],
                                         self.keypoint1[self.delaunay[i][1]][0], self.keypoint1[self.delaunay[i][1]][1])
                painterInstance.drawLine(self.keypoint1[self.delaunay[i][1]][0], self.keypoint1[self.delaunay[i][1]][1],
                                         self.keypoint1[self.delaunay[i][2]][0], self.keypoint1[self.delaunay[i][2]][1])
                painterInstance.drawLine(self.keypoint1[self.delaunay[i][2]][0], self.keypoint1[self.delaunay[i][2]][1],
                                         self.keypoint1[self.delaunay[i][0]][0], self.keypoint1[self.delaunay[i][0]][1])
            # display the triangles in image 1
            self.image1.setPixmap(QPixmap.fromImage(self.outFeed1))

            # draw lines for the triangulation on image 2
            self.image2.setPixmap(QPixmap.fromImage(self.outFeed2))
            self.image2.setAlignment(Qt.AlignCenter)
            painterInstance = QPainter(self.outFeed2)
            penRectangle = QPen(Qt.red)
            painterInstance.setPen(penRectangle)
            for i in range(len(self.delaunay)):
                painterInstance.drawLine(self.keypoint2[self.delaunay[i][0]][0], self.keypoint2[self.delaunay[i][0]][1],
                                         self.keypoint2[self.delaunay[i][1]][0], self.keypoint2[self.delaunay[i][1]][1])
                painterInstance.drawLine(self.keypoint2[self.delaunay[i][1]][0], self.keypoint2[self.delaunay[i][1]][1],
                                         self.keypoint2[self.delaunay[i][2]][0], self.keypoint2[self.delaunay[i][2]][1])
                painterInstance.drawLine(self.keypoint2[self.delaunay[i][2]][0], self.keypoint2[self.delaunay[i][2]][1],
                                         self.keypoint2[self.delaunay[i][0]][0], self.keypoint2[self.delaunay[i][0]][1])
            # display the triangles in image 2
            self.image2.setPixmap(QPixmap.fromImage(self.outFeed2))
示例#54
0
    def paint(self, painter: QPainter, option: QStyleOptionGraphicsItem, widget: QWidget=None):
        fillColor = self.color.darker(150) if (option.state & QStyle.State_Selected) else self.color

        if option.state & QStyle.State_MouseOver:
            fillColor = fillColor.lighter(125)

        lod = option.levelOfDetailFromTransform(painter.worldTransform())
        if lod < 0.2:
            if lod < 0.125:
                painter.fillRect(QRectF(0, 0, 110, 70), fillColor)
                return

            b = painter.brush()
            painter.setBrush(fillColor)
            painter.drawRect(13, 13, 97, 57)
            painter.setBrush(b)
            return

        oldPen = painter.pen()
        pen = oldPen
        width = 0
        if option.state & QStyle.State_Selected:
            width += 2

        pen.setWidth(width)
        b = painter.brush()
        f = 120 if option.state & QStyle.State_Sunken else 100
        painter.setBrush(QBrush(fillColor.darker(f)))
        painter.drawRect(QRect(14, 14, 79, 39))
        painter.setBrush(b)

        if lod >= 1:
            painter.setPen(QPen(Qt.gray, 1))
            painter.drawLine(15, 54, 94, 54)
            painter.drawLine(94, 53, 94, 15)
            painter.setPen(QPen(Qt.black, 0))

        if lod >= 2:
            font = QFont("Times", 10)
            font.setStyleStrategy(QFont.ForceOutline)
            painter.setFont(font)
            painter.save()
            painter.scale(0.1, 0.1)
            painter.drawText(170, 180, "Model: VSC-2000 (Very Small Chip) at {}x{}".format(self.x, self.y))
            painter.drawText(170, 200, "Serial number: DLWR-WEER-123L-ZZ33-SDSJ")
            painter.drawText(170, 220, "Manufacturer: Chip Manufacturer")

        lines = []
        if lod >= 0.5:
            for i in np.arange(0, 10, 1 if lod > 0.5 else 2):
                lines.append(QLineF(18 + 7 * i, 13, 18 + 7 * i, 5))
                lines.append(QLineF(18 + 7 * i, 54, 18 + 7 * i, 62))

            for i in np.arange(0, 6, 1 if lod > 0.5 else 2):
                lines.append(QLineF(5,18 + 5 * i, 13, 18 + 5 * i))
                lines.append(QLineF(94, 18 + 5 * i, 102, 18 + 5 * i))

        if lod >= 0.4:
            lineData = [
                QLineF(25, 35, 35, 35),
                QLineF(35, 30, 35, 40),
                QLineF(35, 30, 45, 35),
                QLineF(35, 40, 45, 35),
                QLineF(45, 30, 45, 40),
                QLineF(45, 35, 55, 35),
            ]
            lines.extend(lineData)

        painter.drawLines(lines)

        if len(self.stuff) > 1:
            p = painter.pen()
            painter.setPen(QPen(Qt.red, 1, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
            painter.setBrush(Qt.NoBrush)
            path = QPainterPath()
            path.moveTo(self.stuff[0])
            for i in np.arange(len(self.stuff)):
                path.lineTo(self.stuff[i])
            painter.drawPath(path)
            painter.setPen(p)
示例#55
0
    def drawValues(self, qp: QtGui.QPainter):
        if len(self.data) == 0 and len(self.reference) == 0:
            return
        pen = QtGui.QPen(self.sweepColor)
        pen.setWidth(self.pointSize)
        line_pen = QtGui.QPen(self.sweepColor)
        line_pen.setWidth(self.lineThickness)
        highlighter = QtGui.QPen(QtGui.QColor(20, 0, 255))
        highlighter.setWidth(1)
        if not self.fixedSpan:
            if len(self.data) > 0:
                fstart = self.data[0].freq
                fstop = self.data[len(self.data) - 1].freq
            else:
                fstart = self.reference[0].freq
                fstop = self.reference[len(self.reference) - 1].freq
            self.fstart = fstart
            self.fstop = fstop
        else:
            fstart = self.fstart = self.minFrequency
            fstop = self.fstop = self.maxFrequency

        # Draw bands if required
        if self.bands.enabled:
            self.drawBands(qp, fstart, fstop)

        if self.fixedValues:
            maxValue = self.maxDisplayValue
            minValue = self.minDisplayValue
            self.maxValue = maxValue
            self.minValue = minValue
        else:
            # Find scaling
            minValue = -1
            maxValue = 1
            self.maxValue = maxValue
            self.minValue = minValue
            # for d in self.data:
            #     val = d.re
            #     if val > maxValue:
            #         maxValue = val
            #     if val < minValue:
            #         minValue = val
            # for d in self.reference:  # Also check min/max for the reference sweep
            #     if d.freq < self.fstart or d.freq > self.fstop:
            #         continue
            #     logmag = self.logMag(d)
            #     if logmag > maxValue:
            #         maxValue = logmag
            #     if logmag < minValue:
            #         minValue = logmag

            # minValue = 10*math.floor(minValue/10)
            # self.minValue = minValue
            # maxValue = 10*math.ceil(maxValue/10)
            # self.maxValue = maxValue

        span = maxValue - minValue
        if span == 0:
            span = 0.01
        self.span = span

        tick_count = math.floor(self.chartHeight / 60)
        tick_step = self.span / tick_count

        for i in range(tick_count):
            val = minValue + i * tick_step
            y = self.topMargin + round(
                (maxValue - val) / span * self.chartHeight)
            qp.setPen(QtGui.QPen(self.foregroundColor))
            qp.drawLine(self.leftMargin - 5, y,
                        self.leftMargin + self.chartWidth, y)
            if val > minValue and val != maxValue:
                qp.setPen(QtGui.QPen(self.textColor))
                qp.drawText(3, y + 4, str(round(val, 2)))

        qp.setPen(QtGui.QPen(self.foregroundColor))
        qp.drawLine(self.leftMargin - 5, self.topMargin,
                    self.leftMargin + self.chartWidth, self.topMargin)
        qp.setPen(self.textColor)
        qp.drawText(3, self.topMargin + 4, str(maxValue))
        qp.drawText(3, self.chartHeight + self.topMargin, str(minValue))
        self.drawFrequencyTicks(qp)

        self.drawData(qp, self.data, self.sweepColor, self.getReYPosition)
        self.drawData(qp, self.reference, self.referenceColor,
                      self.getReYPosition)
        self.drawData(qp, self.data, self.secondarySweepColor,
                      self.getImYPosition)
        self.drawData(qp, self.reference, self.secondaryReferenceColor,
                      self.getImYPosition)
        self.drawMarkers(qp, y_function=self.getReYPosition)
        self.drawMarkers(qp, y_function=self.getImYPosition)
示例#56
0
    def paintEvent(self, event):
        locker = QMutexLocker(self.thread.mutex)
        img = self.thread.image

        dst = self.imgRect()
        qp = QPainter()
        qp.begin(self)

        # draw background
        brush = QBrush(Qt.SolidPattern)
        # brush.setColor(Qt.white)
        brush.setColor(Qt.black)
        qp.setBrush(brush)
        qp.drawRect(QRect(0,0,self.width(),self.height()))

        qp.save()
        qp.translate(dst.x()+dst.width()/2, dst.y()+dst.height()/2)
        qp.scale(dst.width()/img.width(), dst.width()/img.width())
        qp.translate(-img.width()/2, -img.height()/2)
        qp.drawImage(0,0,img)
        qp.restore()

        # draw orientation lines
        qp.setPen(QColor(255,255,255,150))
        qp.drawLine(dst.x()+dst.width()/3,dst.y()+0,
            dst.x()+dst.width()/3,dst.y()+dst.height())
        qp.drawLine(dst.x()+dst.width()/2,dst.y()+0,
            dst.x()+dst.width()/2,dst.y()+dst.height())
        qp.drawLine(dst.x()+dst.width()*2/3,dst.y()+0,
            dst.x()+dst.width()*2/3,dst.y()+dst.height())
        qp.drawLine(dst.x()+0,dst.y()+dst.height()/3,
            dst.x()+dst.width(),dst.y()+dst.height()/3)
        qp.drawLine(dst.x()+0,dst.y()+dst.height()/2,
            dst.x()+dst.width(),dst.y()+dst.height()/2)
        qp.drawLine(dst.x()+0,dst.y()+dst.height()*2/3,
            dst.x()+dst.width(),dst.y()+dst.height()*2/3)

        qp.end()
示例#57
0
 def drawLine(self, painter: QPainter, a: Point, b: Point):
     painter.drawLine(self.to_qpoint(a), self.to_qpoint(b))
    def paintEvent(self, _event: QPaintEvent):
        if not self.crop or not self.resolution:
            return

        painter = QPainter(self)

        # Keep a backup of the transform and create a new one
        transform = painter.worldTransform()

        # Set scaling transform
        transform = transform.scale(self.width() / self.resolution.width(),
                                    self.height() / self.resolution.height())

        # Compute the transform to flip the coordinate system on the x axis
        transform_flip = QTransform()
        if self.flip_x:
            transform_flip = transform_flip.translate(self.resolution.width(), 0.0)
            transform_flip = transform_flip.scale(-1.0, 1.0)

        # Small helper for tuple to QPoint
        def toqp(point):
            return QPoint(point[0], point[1])

        # Starting from here we care about AA
        painter.setRenderHint(QPainter.Antialiasing)

        # Draw all the QR code results
        for res in self.results:
            painter.setWorldTransform(transform_flip * transform, False)

            # Draw lines between all of the QR code points
            pen = QPen(self.qr_outline_pen)
            if res in self.validator_results.result_colors:
                pen.setColor(self.validator_results.result_colors[res])
            painter.setPen(pen)
            num_points = len(res.points)
            for i in range(0, num_points):
                i_n = i + 1

                line_from = toqp(res.points[i])
                line_from += self.crop.topLeft()

                line_to = toqp(res.points[i_n] if i_n < num_points else res.points[0])
                line_to += self.crop.topLeft()

                painter.drawLine(line_from, line_to)

            # Draw the QR code data
            # Note that we reset the world transform to only the scaled transform
            # because otherwise the text could be flipped. We only use transform_flip
            # to map the center point of the result.
            painter.setWorldTransform(transform, False)
            font_metrics = painter.fontMetrics()
            data_metrics = QSize(font_metrics.horizontalAdvance(res.data), font_metrics.capHeight())

            center_pos = toqp(res.center)
            center_pos += self.crop.topLeft()
            center_pos = transform_flip.map(center_pos)

            text_offset = QPoint(data_metrics.width(), data_metrics.height())
            text_offset = text_offset / 2
            text_offset.setX(-text_offset.x())
            center_pos += text_offset

            padding = self.BG_RECT_PADDING
            bg_rect_pos = center_pos - QPoint(padding, data_metrics.height() + padding)
            bg_rect_size = data_metrics + (QSize(padding, padding) * 2)
            bg_rect = QRect(bg_rect_pos, bg_rect_size)
            bg_rect_path = QPainterPath()
            radius = self.BG_RECT_CORNER_RADIUS
            bg_rect_path.addRoundedRect(QRectF(bg_rect), radius, radius, Qt.AbsoluteSize)
            painter.setPen(self.bg_rect_pen)
            painter.fillPath(bg_rect_path, self.bg_rect_fill)
            painter.drawPath(bg_rect_path)

            painter.setPen(self.text_pen)
            painter.drawText(center_pos, res.data)
示例#59
0
    def paintEvent(self, _event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        width = self.width()
        height = self.height()

        if self.dynamic_resize:
            knob_radius = self.dynamic_knob_radius
        else:
            knob_radius = self.knob_radius

        # ensure that the center point is in the middle of a pixel to ensure
        # that exact vertial and horizantal ticks are drawn exactly 1px wide
        x = math.floor(width / 2.0) + 0.5
        y = math.floor(height / 2.0) + 0.5

        if DEBUG:
            painter.fillRect(0, 0, width, height, Qt.yellow)

        painter.translate(x, y)

        if self.knob_style == KnobWidget.STYLE_NEEDLE:
            r = min(x, y) - 1

            painter.setPen(Qt.white)
            painter.setBrush(Qt.white)
            painter.drawEllipse(QPoint(0, 0), r, r)

        angle = self.value_factor * self.total_angle - (self.total_angle / 2.0)

        # draw base knob or needle spike
        if self.knob_style == KnobWidget.STYLE_ROUND:
            painter.setPen(self.border_color)

            if self.pressed:
                gradient = QRadialGradient(0, 0, knob_radius)
                gradient.setColorAt(0, self.base_color_pressed)
                gradient.setColorAt(0.85, self.base_color)
                gradient.setColorAt(1, self.base_color)

                painter.setBrush(gradient)
            else:
                painter.setBrush(self.base_color)

            painter.drawEllipse(QPoint(0, 0), knob_radius, knob_radius)
        elif self.knob_style == KnobWidget.STYLE_NEEDLE:
            painter.save()
            painter.rotate(angle)
            painter.setPen(self.needle_color)
            painter.setBrush(self.needle_color)

            needle = QPolygonF()
            needle.append(QPointF(self.needle_base_radius * 0.6, 0))
            needle.append(QPointF(0, -knob_radius))
            needle.append(QPointF(-self.needle_base_radius * 0.6, 0))

            painter.drawPolygon(needle)
            painter.restore()

        # draw knob mark or needle base
        if self.knob_style == KnobWidget.STYLE_ROUND:
            painter.save()
            painter.rotate(angle)
            painter.setPen(QPen(self.mark_color, 2))
            painter.drawLine(0, -knob_radius * 0.4, 0, -knob_radius * 0.8)
            painter.restore()
        elif self.knob_style == KnobWidget.STYLE_NEEDLE:
            painter.setPen(self.border_color)
            painter.setBrush(self.base_color)
            painter.drawEllipse(QPoint(0, 0), self.needle_base_radius,
                                self.needle_base_radius)

        if self.scale_visible:
            painter.setPen(Qt.black)

            # draw scale arc
            if self.scale_arc_visible:
                painter.drawArc(-knob_radius - self.knob_to_scale,
                                -knob_radius - self.knob_to_scale,
                                knob_radius * 2 + self.knob_to_scale * 2,
                                knob_radius * 2 + self.knob_to_scale * 2,
                                (90 + self.total_angle / 2) * 16,
                                -self.total_angle * 16)

            # draw scale ticks
            def value_to_angle(value):
                return (float(value - self.minimum_value) / self.value_range
                        ) * self.total_angle - (self.total_angle / 2.0)

            value = self.minimum_value

            while value <= self.maximum_value:
                angle = value_to_angle(value)

                painter.save()
                painter.rotate(value_to_angle(value))
                painter.drawLine(
                    0, -knob_radius - self.knob_to_scale, 0,
                    -knob_radius - self.knob_to_scale - self.tick_size_large)

                if self.scale_text_visible:
                    p = painter.worldTransform().map(QPoint(0, -knob_radius - \
                                                               self.knob_to_scale - \
                                                               self.tick_size_large - \
                                                               self.tick_to_text - \
                                                               self.text_radius))

                painter.restore()

                if self.scale_text_visible:
                    if DEBUG:
                        painter.save()
                        painter.setPen(QColor(255, 0, 0, 50))
                        painter.setBrush(QColor(255, 0, 0, 50))
                        painter.drawEllipse(QPoint(p.x() - x,
                                                   p.y() - y),
                                            self.text_radius, self.text_radius)
                        painter.restore()

                    painter.drawText(
                        p.x() - x - 30,
                        p.y() - y - 30, 60, 60,
                        Qt.TextDontClip | Qt.AlignHCenter | Qt.AlignVCenter,
                        str(value))

                for i in range(1, self.scale_step_divisions):
                    sub_value = value + (float(self.scale_step_size) *
                                         i) / self.scale_step_divisions

                    if sub_value > self.maximum_value:
                        break

                    painter.save()
                    painter.rotate(value_to_angle(sub_value))
                    painter.drawLine(
                        0, -knob_radius - self.knob_to_scale, 0, -knob_radius -
                        self.knob_to_scale - self.tick_size_small)
                    painter.restore()

                value += self.scale_step_size

        if self.title_text != None:
            painter.drawText(
                -knob_radius, knob_radius - 30, knob_radius * 2, 60,
                Qt.TextDontClip | Qt.AlignHCenter | Qt.AlignVCenter,
                self.title_text)
示例#60
0
    def printDiagram(self, printer, diagramName=""):
        """
        Public method to print the diagram.
        
        @param printer reference to a ready configured printer object
            (QPrinter)
        @param diagramName name of the diagram (string)
        """
        painter = QPainter()
        painter.begin(printer)
        offsetX = 0
        offsetY = 0
        widthX = 0
        heightY = 0
        font = QFont("times", 10)
        painter.setFont(font)
        fm = painter.fontMetrics()
        fontHeight = fm.lineSpacing()
        marginX = printer.pageRect().x() - printer.paperRect().x()
        marginX = (Preferences.getPrinter("LeftMargin") *
                   int(printer.resolution() / 2.54) - marginX)
        marginY = printer.pageRect().y() - printer.paperRect().y()
        marginY = (Preferences.getPrinter("TopMargin") *
                   int(printer.resolution() / 2.54) - marginY)

        width = (printer.width() - marginX -
                 Preferences.getPrinter("RightMargin") *
                 int(printer.resolution() / 2.54))
        height = (printer.height() - fontHeight - 4 - marginY -
                  Preferences.getPrinter("BottomMargin") *
                  int(printer.resolution() / 2.54))

        border = self.border == 0 and 5 or self.border
        rect = self._getDiagramRect(border)
        diagram = self.__getDiagram(rect)

        finishX = False
        finishY = False
        page = 0
        pageX = 0
        pageY = 1
        while not finishX or not finishY:
            if not finishX:
                offsetX = pageX * width
                pageX += 1
            elif not finishY:
                offsetY = pageY * height
                offsetX = 0
                pageY += 1
                finishX = False
                pageX = 1
            if (width + offsetX) > diagram.width():
                finishX = True
                widthX = diagram.width() - offsetX
            else:
                widthX = width
            if diagram.width() < width:
                widthX = diagram.width()
                finishX = True
                offsetX = 0
            if (height + offsetY) > diagram.height():
                finishY = True
                heightY = diagram.height() - offsetY
            else:
                heightY = height
            if diagram.height() < height:
                finishY = True
                heightY = diagram.height()
                offsetY = 0

            painter.drawPixmap(marginX, marginY, diagram, offsetX, offsetY,
                               widthX, heightY)
            # write a foot note
            s = self.tr("{0}, Page {1}").format(diagramName, page + 1)
            tc = QColor(50, 50, 50)
            painter.setPen(tc)
            painter.drawRect(marginX, marginY, width, height)
            painter.drawLine(marginX, marginY + height + 2, marginX + width,
                             marginY + height + 2)
            painter.setFont(font)
            painter.drawText(marginX, marginY + height + 4, width, fontHeight,
                             Qt.AlignRight, s)
            if not finishX or not finishY:
                printer.newPage()
                page += 1

        painter.end()