def draw_markings(self, painter):
        """ draw markings"""
        painter.save()
        painter.translate(self.width() / 2, self.height() / 2)
        scale = min((self.width() - self._margins) / 120.0,
                    (self.height() - self._margins) / 120.0)
        painter.scale(scale, scale)

        font = QFont(self.font())
        font.setPixelSize(10)
        metrics = QFontMetricsF(font)

        painter.setFont(font)
        painter.setPen(QPen(QBrush(Qt.black), 1, Qt.SolidLine))

        i = 0
        while i < 360:

            if i % 45 == 0:
                painter.drawLine(0, -40, 0, -50)
                painter.drawText(-metrics.width(self._pointText[i]) / 2.0, -52,
                                 self._pointText[i])
            else:
                painter.drawLine(0, -45, 0, -50)

            painter.rotate(15)
            i += 15

        painter.restore()
Beispiel #2
0
    def drawMarkings(self, painter):
        painter.save()
        painter.translate(self.width() / 2, self.height() / 2)
        scale = min((self.width() - self._margins) / 120.0,
                    (self.height() - self._margins) / 120.0)
        painter.scale(scale, scale)

        font = QFont(self.font())
        font.setPixelSize(8)
        metrics = QFontMetricsF(font)

        painter.setFont(font)
        painter.setPen(QPen(QColor(self.scaleColor)))
        tickInterval = 5
        i = 0
        while i < 360:

            if i % 45 == 0:
                painter.drawLine(0, -40, 0, -50)
                painter.drawText(int(-metrics.width(self._pointText[i]) / 2.0),
                                 -52, self._pointText[i])
            else:
                painter.drawLine(0, -45, 0, -50)

            painter.rotate(tickInterval)
            i += tickInterval

        painter.restore()
Beispiel #3
0
def setFontMetrics():
    """ Application must be running before you mess
    too much with Fonts in Qt5
    """
    global SEQUENCEFONT
    global SEQUENCEFONTMETRICS
    global SEQUENCEFONTCHARWIDTH
    global SEQUENCEFONTCHARHEIGHT
    global SEQUENCEFONTEXTRAWIDTH
    global SEQUENCETEXTXCENTERINGOFFSET
    global SEQUENCETEXTYCENTERINGOFFSET
    SEQUENCEFONT = QFont("Monaco")
    if hasattr(QFont, 'Monospace'):
        SEQUENCEFONT.setStyleHint(QFont.Monospace)
    SEQUENCEFONT.setFixedPitch(True)
    SEQUENCEFONTH = int(PATH_BASE_WIDTH / 3.)
    SEQUENCEFONT.setPixelSize(SEQUENCEFONTH)
    SEQUENCEFONTMETRICS = QFontMetricsF(SEQUENCEFONT)
    SEQUENCEFONTCHARWIDTH = SEQUENCEFONTMETRICS.width("A")
    SEQUENCEFONTCHARHEIGHT = SEQUENCEFONTMETRICS.height()
    SEQUENCEFONTEXTRAWIDTH = PATH_BASE_WIDTH - SEQUENCEFONTCHARWIDTH
    SEQUENCEFONT.setLetterSpacing(QFont.AbsoluteSpacing,
                                 SEQUENCEFONTEXTRAWIDTH)
    SEQUENCETEXTXCENTERINGOFFSET = SEQUENCEFONTEXTRAWIDTH / 4.
    SEQUENCETEXTYCENTERINGOFFSET = PATH_BASE_WIDTH * 0.6
Beispiel #4
0
    def _drawLabels(self, painter: QPainter):
        """отображение подписей на осях"""
        f_m = QFontMetricsF(self._style['grid']['font'])
        pen = painter.pen()

        text = 'Расход, м³/сутки'
        offset_x = self._margins[0] + self.getDrawArea().width() / 2
        offset_x -= f_m.width(text) / 2
        offset_y = self.height() - self._margins[3] + f_m.height()
        offset_y += 20
        painter.setPen(self._style['grid']['border'])
        painter.drawText(QPointF(offset_x, offset_y), text)

        text = 'Напор, м'
        offset_x = 0 - f_m.height() - 5
        self._drawLabel(painter, f_m, offset_x, text)

        text = 'Мощность, кВт'
        offset_x = self._margins[0] + self.getDrawArea().width() + 10
        painter.setPen(self._charts['etl_pwr'].pen)
        self._drawLabel(painter, f_m, offset_x, text)

        text = 'КПД, %'
        offset_x = self._margins[0] + self.getDrawArea().width() + \
                   self._grid_divs['y1'].width + 40
        painter.setPen(self._charts['etl_eff'].pen)
        self._drawLabel(painter, f_m, offset_x, text)
        painter.setPen(pen)
Beispiel #5
0
    def drawTwoTexts(
        self,
        p: QPainter,
        firstRect: QRectF,
        secondRect: QRectF,
        innerRadius: float,
        value: float,
    ):
        if not self.m_format:
            return

        if self.useSystemFont:
            font = QFont(self.font())
        else:
            font = QFont('Noto Sans')

        font.setPixelSize(10)
        fm = QFontMetricsF(font)
        maxWidth = fm.width(self.valueToText(self.m_max))
        delta = innerRadius / maxWidth
        timeFontSize = font.pixelSize() * delta * 0.75
        font.setPixelSize(int(timeFontSize))
        p.setFont(font)
        timeTextRect = QRectF(firstRect)
        tomatoesTextRect = QRectF(secondRect)
        p.setPen(self.palette().text().color())
        p.drawText(timeTextRect, Qt.AlignCenter | Qt.AlignBottom,
                   self.valueToText(value))
        tomatoesFontSize = timeFontSize * 0.3
        font.setPixelSize(int(tomatoesFontSize))
        p.setFont(font)
        p.drawText(tomatoesTextRect, Qt.AlignHCenter, self.m_second_format)
Beispiel #6
0
    def draw_markings(self, painter):
        painter.save()
        painter.translate(self.width()/2, self.height()/2)
        scale = min((self.width() - self._margins)/120.0, (self.height() - self._margins)/120.0)
        painter.scale(scale, scale)

        font = QFont(self.font())
        font.setPixelSize(12)
        metrics = QFontMetricsF(font)

        painter.setFont(font)
        painter.setPen(self.palette().color(QPalette.WindowText))

        i = 0
        while i < 360:
            if i % 45 == 0:
                painter.drawLine(0, -40, 0, -50)
                painter.drawText(-metrics.width(self._point_text[i])/2.0, -52, self._point_text[i])
            else:
                painter.drawLine(0, -45, 0, -50)

            painter.rotate(15)
            i += 15

        painter.restore()
Beispiel #7
0
    def setupSceneItems(self):
        if Colors.showFps:
            self.fpsLabel = DemoTextItem("FPS: --", Colors.buttonFont(),
                                         Qt.white, -1, None,
                                         DemoTextItem.DYNAMIC_TEXT)
            self.fpsLabel.setZValue(1000)
            self.fpsLabel.setPos(
                Colors.stageStartX,
                600 - QFontMetricsF(Colors.buttonFont()).height() - 5)

        self.mainSceneRoot = QGraphicsWidget()
        self.scene.addItem(self.mainSceneRoot)

        self.companyLogo = ImageItem(
            QImage(self.imagesDir + '/trolltech-logo.png'), 1000, 1000, None,
            True, 0.5)
        self.qtLogo = ImageItem(QImage(self.imagesDir + '/qtlogo_small.png'),
                                1000, 1000, None, True, 0.5)
        self.companyLogo.setZValue(100)
        self.qtLogo.setZValue(100)
        self.pausedLabel = DemoTextItem("PAUSED", Colors.buttonFont(),
                                        Qt.white, -1, None)
        self.pausedLabel.setZValue(100)
        fm = QFontMetricsF(Colors.buttonFont())
        self.pausedLabel.setPos(Colors.stageWidth - fm.width("PAUSED"),
                                590 - fm.height())
        self.pausedLabel.setRecursiveVisible(False)
Beispiel #8
0
    def __init__(self, leftFlow=0, rightFlow=0, maxFlow=100, parent=None):
        super(YPipeWidget, self).__init__(parent)

        self.leftSpinBox = QSpinBox(self)
        self.leftSpinBox.setRange(0, maxFlow)
        self.leftSpinBox.setValue(leftFlow)
        self.leftSpinBox.setSuffix(" l/s")
        self.leftSpinBox.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.leftSpinBox.valueChanged.connect(self.valueChanged)
        self.rightSpinBox = QSpinBox(self)
        self.rightSpinBox.setRange(0, maxFlow)
        self.rightSpinBox.setValue(rightFlow)
        self.rightSpinBox.setSuffix(" l/s")
        self.rightSpinBox.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.rightSpinBox.valueChanged.connect(self.valueChanged)

        self.label = QLabel(self)
        self.label.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken)
        self.label.setAlignment(Qt.AlignCenter)
        fm = QFontMetricsF(self.font())
        self.label.setMinimumWidth(fm.width(" 999 l/s "))

        self.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
        self.setMinimumSize(self.minimumSizeHint())
        self.valueChanged()
Beispiel #9
0
    def __init__(self, parent=None):

        super().__init__()

        # If a <Tab> is present then it should be of width 4
        try:
            _distance = QFontMetricsF(self.font()).horizontalAdvance(" ")
        except AttributeError:
            # PyQt5 version < 5.11
            _distance = QFontMetricsF(self.font()).boundingRect(" ").width()

        self.setTabStopDistance(_distance * self.spaces_per_tab)

        # Line number area
        self.line_number_area = LineNumberArea(self)
        self.blockCountChanged.connect(self.update_line_number_area_width)
        self.updateRequest.connect(self.update_line_number_area)
        self.update_line_number_area_width()

        # Start with a default dictionary based on the current locale.
        self.highlighter = PythonEnchantHighlighter(self.document())
        if enchant is not None:
            try:
                self.highlighter.setDict(enchant.Dict())
            except Exception as err:
                # There are some weird enchant issues on different platforms.
                # One of those has occured.
                warn(str(err), ImportWarning)
Beispiel #10
0
    def __init__(self, leftFlow=0, rightFlow=0, maxFlow=100, parent=None):
        super(YPipeWidget, self).__init__(parent)

        self.leftSpinBox = QSpinBox(
            self)  # 因为不会对其进行布局,所以使用self将其父声明为YPipeWidget
        self.leftSpinBox.setRange(0, maxFlow)
        self.leftSpinBox.setValue(leftFlow)
        self.leftSpinBox.setSuffix(" 升每秒")
        self.leftSpinBox.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.leftSpinBox.valueChanged.connect(self.valueChanged)
        self.rightSpinBox = QSpinBox(self)
        self.rightSpinBox.setRange(0, maxFlow)
        self.rightSpinBox.setValue(rightFlow)
        self.rightSpinBox.setSuffix(" 升每秒")
        self.rightSpinBox.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.rightSpinBox.valueChanged.connect(self.valueChanged)

        self.label = QLabel(self)
        self.label.setFrameStyle(
            QFrame.WinPanel
            | QFrame.Raised)  #其接受两个对象,第一个是frame sharp,第二个是shadow style。
        self.label.setLineWidth(2)
        self.label.setAlignment(Qt.AlignCenter)
        fm = QFontMetricsF(self.font())
        self.label.setMinimumWidth(fm.width(" 666999 升每秒666 "))  #设置下方最大宽度

        self.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
        self.setMinimumSize(self.minimumSizeHint())
        self.valueChanged()
Beispiel #11
0
    def __init__(self, lbl='', onColor='green', offColor='red', initialState=False, maxSize=50, position=1, parent=None, callback=None, alignment=1, valignment=1):
        QFrame.__init__(self, parent)
        self.numberControl = ToggleSwitch(onColor, offColor, initialState, maxSize, parent, callback)
        
        if position < 3:
            layout =  QVBoxLayout()
        else:
            layout = QHBoxLayout()
            
        self.lbl = lbl
        self.lblcontrol = QLabel(lbl, self)
        
        if position == 3: # left of switch
            self.lblcontrol.setAlignment(Qtc.AlignRight)
        elif position == 4: # right of switch
            self.lblcontrol.setAlignment(Qtc.AlignLeft)
        else:
            # Above or below
            self.lblcontrol.setAlignment(Qtc.AlignCenter)

        # add top or left
        if len(lbl) > 0:
            if position == 1 or position == 3:
                layout.addWidget(self.lblcontrol)

        layout.addWidget(self.numberControl)
        
        # Add bottom or right
        if len(lbl) > 0:
            if position == 2 or position == 4:
                layout.addWidget(self.lblcontrol)
                
        if alignment == 1:        
            halign = Qtc.AlignCenter
        elif alignment == 2:
            halign = Qtc.AlignLeft
        else:
            halign = Qtc.AlignRight

        if valignment == 1:
            valign = Qtc.AlignVCenter
        elif valignment == 2:
            valign = Qtc.AlignTop
        else:
            valign = Qtc.AlignBottom
            
        layout.setAlignment(halign | valign)
        # layout.setAlignment(Qtc.AlignCenter | Qtc.AlignVCenter)
        self.setLayout(layout)
        
        textfont = self.lblcontrol.font()
        metrics = QFontMetricsF(textfont)
        
        maxWidth = max( (maxSize+4),(maxSize*2 + metrics.width(lbl)) )
        maxHeight = max( (maxSize/2+4),(maxSize/2 + metrics.height()+2) )
        #print('Min size: ' + str(maxWidth) + " x " + str(maxHeight))
        
        self.setMinimumSize(int(maxWidth), int(maxHeight))

        self.show()
Beispiel #12
0
    def setupSceneItems(self):
        if Colors.showFps:
            self.fpsLabel = DemoTextItem("FPS: --", Colors.buttonFont(),
                    Qt.white, -1, None, DemoTextItem.DYNAMIC_TEXT)
            self.fpsLabel.setZValue(1000)
            self.fpsLabel.setPos(Colors.stageStartX,
                    600 - QFontMetricsF(Colors.buttonFont()).height() - 5)

        self.mainSceneRoot = QGraphicsWidget()
        self.scene.addItem(self.mainSceneRoot)

        self.companyLogo = ImageItem(
                QImage(self.imagesDir + '/trolltech-logo.png'),
                1000, 1000, None, True, 0.5)
        self.qtLogo = ImageItem(QImage(self.imagesDir + '/qtlogo_small.png'),
                1000, 1000, None, True, 0.5)
        self.companyLogo.setZValue(100)
        self.qtLogo.setZValue(100)
        self.pausedLabel = DemoTextItem("PAUSED", Colors.buttonFont(),
                Qt.white, -1, None)
        self.pausedLabel.setZValue(100)
        fm = QFontMetricsF(Colors.buttonFont())
        self.pausedLabel.setPos(Colors.stageWidth - fm.width("PAUSED"),
                590 - fm.height())
        self.pausedLabel.setRecursiveVisible(False)
Beispiel #13
0
    def draw_markings(self, painter):
        painter.save()
        painter.translate(self.width() / 2, self.height() / 2)
        scale = min((self.width() - self._margins) / 120.0,
                    (self.height() - self._margins) / 120.0)
        painter.scale(scale, scale)

        font = QFont(self.font())
        font.setPixelSize(12)
        metrics = QFontMetricsF(font)

        painter.setFont(font)
        painter.setPen(self.palette().color(QPalette.WindowText))

        i = 0
        while i < 360:
            if i % 45 == 0:
                painter.drawLine(0, -40, 0, -50)
                painter.drawText(-metrics.width(self._point_text[i]) / 2.0,
                                 -52, self._point_text[i])
            else:
                painter.drawLine(0, -45, 0, -50)

            painter.rotate(15)
            i += 15

        painter.restore()
Beispiel #14
0
 def minimumSizeHint(self):
     font = QFont(self.font())
     font.setPointSize(font.pointSize() - 1)
     fm = QFontMetricsF(font)
     return QSize(
         fm.width(FractionSlider.WSTRING) * self.__denominator,
         (fm.height() * 4) + FractionSlider.YMARGIN)
    def drawDirections(self, painter):
        painter.save()
        painter.translate(self.width() / 2,
                          self.height() /
                          2)  # Centers the position on the widget.
        scale = min((self.width() - self.margins) / 120,
                    (self.height() - self.margins) / 120)
        painter.scale(scale, scale)

        font = QFont(self.font())
        font.setPixelSize(10)
        metrics = QFontMetricsF(font)

        painter.setFont(font)
        painter.setPen(self.palette().color(QPalette.Shadow))

        i = 0
        while i < 360:
            # Check if it should draw the directions or if it should draw the lines between the directions.
            if i % 45 == 0:
                painter.drawLine(0, -40, 0, -50)
                painter.drawText(-metrics.width(self.directions[i]) / 2, -52,
                                 self.directions[i])
            else:
                painter.drawLine(0, -45, 0, -50)
            painter.rotate(15)
            i += 15
        painter.restore()
Beispiel #16
0
 def setPaintDevice(device):
     """ Used to setup font metrics correctly """
     Constants.nodeItemFontNameMetrics = QFontMetricsF(
         Constants.nodeItemFontName, device)
     Constants.nodeItemFontTypeMetrics = QFontMetricsF(
         Constants.nodeItemFontType, device)
     Constants.nodeItemFontBlobMetrics = QFontMetricsF(
         Constants.nodeItemFontBlob, device)
Beispiel #17
0
    def reposition(self):

        fm = QFontMetricsF(self._font, self)
        rect = fm.boundingRect(QRectF(self.rect()), Qt.AlignCenter,
                str(self._value))
        self._xpos = -rect.width()/2.0
        self._ypos = rect.height()/2.0 - fm.descent()
        self.update()
Beispiel #18
0
    def rescale(self):

        fm = QFontMetricsF(self._font, self)
        maxRect = fm.boundingRect(QRectF(self.rect()), Qt.AlignCenter,
                str(self._maximum))
        xscale = float(self.width())/maxRect.width()
        yscale = float(self.height())/maxRect.height()
        self._scale = min(xscale, yscale)
Beispiel #19
0
    def reposition(self):

        fm = QFontMetricsF(self._font, self)
        rect = fm.boundingRect(QRectF(self.rect()), Qt.AlignCenter,
                               str(self._value))
        self._xpos = -rect.width() / 2.0
        self._ypos = rect.height() / 2.0 - fm.descent()
        self.update()
Beispiel #20
0
    def sizeHint(self):
        metrics = QFontMetricsF(self.editor.font())
        size_hint = QSize(metrics.height(), metrics.height())

        if size_hint.width() > 16:
            size_hint.setWidth(16)

        return size_hint
Beispiel #21
0
    def rescale(self):

        fm = QFontMetricsF(self._font, self)
        maxRect = fm.boundingRect(QRectF(self.rect()), Qt.AlignCenter,
                                  str(self._maximum))
        xscale = float(self.width()) / maxRect.width()
        yscale = float(self.height()) / maxRect.height()
        self._scale = min(xscale, yscale)
Beispiel #22
0
 def updateTabWidth(self):
     if not hasattr(self, "_tabWidth"):
         return
     fM = QFontMetricsF(self.font())
     pixelWidth = fM.width(' ') * self._tabWidth
     document = self.document()
     opt = document.defaultTextOption()
     opt.setTabStop(pixelWidth)
     document.setDefaultTextOption(opt)
Beispiel #23
0
 def updateTabWidth(self):
     if not hasattr(self, "_tabWidth"):
         return
     fM = QFontMetricsF(self.font())
     pixelWidth = fM.width(' ') * self._tabWidth
     document = self.document()
     opt = document.defaultTextOption()
     opt.setTabStop(pixelWidth)
     document.setDefaultTextOption(opt)
Beispiel #24
0
    def __init__(self, lbl='', onColor='green', offColor='red', initialState=False, maxSize=80, position=1, alignment=1, valignment=1, parent=None):
        QFrame.__init__(self, parent)
        self.numberControl = LEDIndicator(onColor, offColor, initialState, maxSize, parent)
        
        if position < 3:
            layout =  QVBoxLayout()
        else:
            layout = QHBoxLayout()
            
        if len(lbl) == 0:
            lbl = " "
        self.lbl = lbl
        self.lblcontrol = QLabel(lbl, self)
        self.lblcontrol.setAlignment(Qtc.AlignCenter)

        # add top or left
        if len(lbl) > 0:
            if position == 1 or position == 3:
                layout.addWidget(self.lblcontrol)
        else:
            self.hasLabel = False

        layout.addWidget(self.numberControl)
        
        # Add bottom or right
        if len(lbl) > 0:
            if position == 2 or position == 4:
                layout.addWidget(self.lblcontrol)
                
        if alignment == 1:        
            halign = Qtc.AlignCenter
        elif alignment == 2:
            halign = Qtc.AlignLeft
        else:
            halign = Qtc.AlignRight

        if valignment == 1:
            valign = Qtc.AlignVCenter
        elif valignment == 2:
            valign = Qtc.AlignTop
        else:
            valign = Qtc.AlignBottom
            
        layout.setAlignment(halign | valign)
        self.setLayout(layout)
        
        if (len(lbl) > 0):
            textfont = self.lblcontrol.font()
            metrics = QFontMetricsF(textfont)
            
            maxWidth = max( (maxSize+30),(maxSize + metrics.width(lbl)+4) )
            maxHeight = max( (maxSize+35),(maxSize + metrics.height()+2) )
            self.setMinimumSize(maxWidth, maxHeight)
        else:
            self.setMinimumSize(maxSize+2, maxSize+2)  

        self.show()
Beispiel #25
0
 def __outline_rect(self):
     """:rtype QRectF"""
     padding = 8
     metrics = QFontMetricsF()
     rect = metrics.boundingRect(self.text)
     """:type rect: QRectF"""
     rect.adjust(-padding, -padding, padding, padding)
     rect.translate(-rect.center())
     return rect
Beispiel #26
0
 def resizeEvent(self, event=None):
     fm = QFontMetricsF(self.font())
     x = (self.width() - self.label.width()) / 2
     y = self.height() - (fm.height() * 2)
     self.label.move(x, y)
     y = self.height() / 60.0
     x = (self.width() / 4.0) - self.leftSpinBox.width()
     self.leftSpinBox.move(x, y)
     x = self.width() - (self.width() / 4.0)
     self.rightSpinBox.move(x, y)  # 左上角为(0,0)移动点以左上角为标准
Beispiel #27
0
 def prepare(self, axis: Axis):
     """подготовка делений для оси"""
     # logger.debug(f"{self.prepare.__doc__} {self.name}")
     f_m = QFontMetricsF(self.font)
     self.divs.clear()
     for _, div in axis.generateDivSteps():
         div = round(div, 7)
         self.divs.append(div)
         self.updateWidth(str(div), f_m)
     self.height = f_m.height()
     self.is_ready = True
Beispiel #28
0
 def minimumSizeHint(self):
     '''定义字体、字体大小、根据字体Metrics的大小返回一个QSize对象,设置最小的尺寸'''
     font = QFont(self.font()) # 这声明了和没有声明有什么区别?Constructs a font that is a copy of font.
     # self.font() This property describes the widget's requested font.
     # font = QFont() # 只需要一个实例,因为此函数的目的是返回一个QSize
     font.setPointSize(font.pointSize() - 1) # The point size must be greater than zero. 
     # pointSize() Returns -1 if the font size was specified in pixels.
     fm = QFontMetricsF(font) 
     # print(fm.height(),fm.width(FractionSlider.WSTRING),fm.width(FractionSlider.WSTRING+'666')) # Return 11.0 18.0 36.0
     return QSize(fm.width(FractionSlider.WSTRING) *
                  self.__denominator,
                  (fm.height() * 4) + FractionSlider.YMARGIN)
Beispiel #29
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())
Beispiel #30
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())
Beispiel #31
0
 def _drawGridDivs_x(self, painter: QPainter, step: float):
     """отрисовка значений делений на оси X"""
     if len(self._charts) > 0:
         logger.debug(self._drawGridDivs_x.__doc__)
         axis: Axis = self._charts[self._base_chart].getAxis('x')
         fm = QFontMetricsF(self._style['grid']['font'])
         for i, div in axis.generateDivSteps():
             text = str(round(div, 8))
             offset_x = self._margins[0] - fm.boundingRect(text).width() / 2.0
             offset_y = self.height() - self._margins[3] + fm.height() + 5
             painter.drawText(QPointF(offset_x + i * step,
                                      offset_y),
                              text)
Beispiel #32
0
 def _drawGridDivs_y(self, painter: QPainter, step: float, axis_name='y'):
     """отрисовка значений делений на оси Y"""
     if len(self._charts) > 0:
         logger.debug(f"{self._drawGridDivs_y.__doc__} {axis_name}")
         axis: Axis = self._charts[self._base_chart].getAxis(axis_name)
         fm = QFontMetricsF(self._style['grid']['font'])
         for i, div in axis.generateDivSteps():
             text = str(round(div, 8))
             offset_x = self._margins[0] - fm.width(text) - 10
             offset_y = self.height() - self._margins[3] + fm.height() / 4.0
             painter.drawText(QPointF(offset_x,
                                      offset_y - i * step),
                              text)
Beispiel #33
0
 def drawText(self, p: QPainter, innerRect: QRectF, innerRadius: float, value: float):
     if not self.m_format:
         return
     f = QFont(self.font())
     f.setPixelSize(10)
     fm = QFontMetricsF(f)
     maxWidth = fm.width(self.valueToText(self.m_max))
     delta = innerRadius / maxWidth
     fontSize = f.pixelSize() * delta * 0.75
     f.setPixelSize(int(fontSize))
     p.setFont(f)
     textRect = QRectF(innerRect)
     p.setPen(self.palette().text().color())
     p.drawText(textRect, Qt.AlignCenter, self.valueToText(value))
Beispiel #34
0
 def _drawGridDivs_x(self, painter: QPainter, step: float):
     """отрисовка значений делений на оси X"""
     if not self._grid_divs['x0'].is_ready:
         return
     # logger.debug(self._drawGridDivs_x.__doc__)
     f_m = QFontMetricsF(self._style['grid']['font'])
     divs = self._grid_divs['x0'].divs
     pen = painter.pen()
     painter.setPen(self._style['grid']['border'])
     for i, div in enumerate(divs):
         text = str(div)
         offset_x = self._margins[0] - f_m.boundingRect(text).width() / 2.0
         offset_y = self.height() - self._margins[3] + f_m.height() + 5
         painter.drawText(QPointF(offset_x + i * step, offset_y), text)
     painter.setPen(pen)
Beispiel #35
0
        def addRectText(x, w, parent, text="", level=0, tooltip=""):
            deltaH = LEVEL_HEIGHT if level else 0
            r = OutlineRect(0, 0, w, parent.rect().height()-deltaH, parent, title=text)
            r.setPos(x, deltaH)

            txt = QGraphicsSimpleTextItem(text, r)
            f = txt.font()
            f.setPointSize(8)
            fm = QFontMetricsF(f)
            elidedText = fm.elidedText(text, Qt.ElideMiddle, w)
            txt.setFont(f)
            txt.setText(elidedText)
            txt.setPos(r.boundingRect().center() - txt.boundingRect().center())
            txt.setY(0)
            return r
Beispiel #36
0
        def addRectText(x, w, parent, text="", level=0, tooltip=""):
            deltaH = LEVEL_HEIGHT if level else 0
            r = OutlineRect(0, 0, w, parent.rect().height()-deltaH, parent, title=text)
            r.setPos(x, deltaH)

            txt = QGraphicsSimpleTextItem(text, r)
            f = txt.font()
            f.setPointSize(8)
            fm = QFontMetricsF(f)
            elidedText = fm.elidedText(text, Qt.ElideMiddle, w)
            txt.setFont(f)
            txt.setText(elidedText)
            txt.setPos(r.boundingRect().center() - txt.boundingRect().center())
            txt.setY(0)
            return r
    def _draw_volume_axes(self, painter):
        painter.save()

        metrics = QFontMetricsF(painter.font())

        scale_factor = decompose_matrix(self._model)[0]

        pen = QPen()
        origin = self._project([0] * 3)
        for i in range(3):
            pt = [0] * 3
            pt[i] = 1

            # axis line
            color = [0] * 3
            color[i] = 255

            pen.setColor(QColor(*color))
            painter.setPen(pen)
            brush = QBrush(QColor(*color), Qt.SolidPattern)
            painter.setBrush(brush)

            pt = self._project(pt)
            painter.drawLine(QPointF(*origin), QPointF(*pt))
            circle = QRectF(-1.5, -1.5, 3, 3)
            circle.translate(*pt)
            painter.drawEllipse(circle)

            # axis label
            pen.setColor(QColor(255, 255, 255))
            painter.setPen(pen)

            text = f'{self._state.cropped_shape_mm[::-1][i]:.2f} mm\n{self._state.cropped_shape_vx[::-1][i]} vx'
            if abs(scale_factor[::-1][i] - 1) > 1e-2:
                text += f'\n({scale_factor[::-1][i]:.2f}x)'

            bounds = metrics.boundingRect(QRectF(-100, -100, 200, 200),
                                          Qt.AlignCenter, text)

            eps = 1e-6
            norm = (pt - origin) / (numpy.linalg.norm(pt - origin) + eps)
            shift = numpy.abs([bounds.width(), bounds.height()] /
                              (norm + eps) / 2)
            bounds.translate(*(pt + (min(shift) + 5) * norm))

            painter.drawText(bounds, Qt.AlignCenter, text)

        painter.restore()
 def syncWithMapObject(self, renderer):
     nameVisible = self.mObject.isVisible() and self.mObject.name()!=''
     self.setVisible(nameVisible)
     if (not nameVisible):
         return
     metrics = QFontMetricsF(QGuiApplication.font())
     boundingRect = metrics.boundingRect(self.mObject.name())
     boundingRect.translate(-boundingRect.width() / 2, -labelDistance)
     boundingRect.adjust(-labelMargin*2, -labelMargin, labelMargin*2, labelMargin)
     pixelPos = renderer.pixelToScreenCoords_(self.mObject.position())
     bounds = objectBounds(self.mObject, renderer)
     # Adjust the bounding box for object rotation
     transform = QTransform()
     transform.translate(pixelPos.x(), pixelPos.y())
     transform.rotate(self.mObject.rotation())
     transform.translate(-pixelPos.x(), -pixelPos.y())
     bounds = transform.mapRect(bounds)
     # Center the object name on the object bounding box
     pos = QPointF((bounds.left() + bounds.right()) / 2, bounds.top())
     self.setPos(pos + self.mObject.objectGroup().offset())
     if (self.mBoundingRect != boundingRect):
         self.prepareGeometryChange()
         self.mBoundingRect = boundingRect
Beispiel #39
0
	def boundingRect(self):
		fm = QFontMetricsF(self.font)
		width = 34 + fm.width(str(self.itemStack.ammount))
		return QRectF(0, 0, width, 35)
Beispiel #40
0
	def GetWidth(self):
		fm = QFontMetricsF(self.font)
		return 34 + fm.width(str(self.itemStack.ammount))