def setBackground(self, background: QBrush): if not isinstance(background, QBrush): background = QBrush(background) color = background.color() self.setData(Qt.DisplayRole, f"RGB{color.red(), color.green(), color.blue()} [{color.name()}]") super().setBackground(background)
def __set_brushAlpha(self, alpha: int): """ Args: alpha: Description """ brush = QBrush(self.item.brush()) color = QColor(brush.color()) color.setAlpha(alpha) self.item.setBrush(QBrush(color))
def brush_darker(brush, factor): """Return a copy of the brush darkened by factor. """ grad = brush.gradient() if grad: return QBrush(gradient_darker(grad, factor)) else: brush = QBrush(brush) brush.setColor(brush.color().darker(factor)) return brush
class CarreMosaiQ(QGraphicsRectItem): _pen = QPen(QColor(COULEUR_CONTOUR)) _pen.setCosmetic(True) nbInstances = 0 instanceSurvolee = None def __init__(self, x, y, c): super(CarreMosaiQ, self).__init__(0, 0, c, c) QGraphicsRectItem.__init__(self, 0, 0, c, c) self.setPos(x, y) self.setPen(CarreMosaiQ._pen) couleur = QColor(*(randint(*PLAGE_COULEURS) for _ in 'RGB')) self.brush = QBrush(couleur) self.setBrush(self.brush) self.setAcceptHoverEvents(True) self.setCursor(Qt.PointingHandCursor) CarreMosaiQ.nbInstances += 1 def hoverEnterEvent(self, event): couleur = self.brush.color().lighter(FACTEUR_ECLAIRCISSSEMENT) self.setBrush(QBrush(couleur)) CarreMosaiQ.instanceSurvolee = self def hoverLeaveEvent(self, event): self.setBrush(self.brush) CarreMosaiQ.instanceSurvolee = None def mousePressEvent(self, mouseEvent): if mouseEvent.button() == Qt.LeftButton: self.fragmente() elif mouseEvent.button() == Qt.RightButton: QGraphicsRectItem.hoverLeaveEvent(self, None) self.scene().removeItem(self) else: QGraphicsRectItem.mousePressEvent(self, mouseEvent) def fragmente(self): c = self.rect().width() / 2. x = self.x() y = self.y() scene = self.scene() scene.removeItem(self) CarreMosaiQ.nbInstances -= 1 #self.setVisible(False) for (dx, dy) in ((0, 0), (c, 0), (0, c), (c, c)): scene.addItem(CarreMosaiQ(x + dx, y + dy, c)) def taille(self): return self.rect().width() def tailleDansVue(self, vue): return vue.mapFromScene(self.taille(), 0).x() - vue.mapFromScene( 0, 0).x()
def __set_brushAlpha(self, alpha): """Summary Args: alpha (TYPE): Description Returns: TYPE: Description """ brush = QBrush(self.item.brush()) color = QColor(brush.color()) color.setAlpha(alpha) self.item.setBrush(QBrush(color))
class BrushFormation(InstrumentFormation): ''' Specialize to Qt <QBrush> ''' def __init__(self, parentSelector, role=""): InstrumentFormation.__init__(self, name="Brush", parentSelector=parentSelector, role=role) self.instrument = QBrush() self.styleProperties = [ BaseStyleProperty("Color", self.instrument.setColor, self.selector, resettableValueFactory=ResettableColorValue, layoutFactory=ColorStylePropertyLayout, default=self.instrument.color()), BaseStyleProperty( "Style", # Was Pattern self.instrument.setStyle, self.selector, default=self.instrument.style(), # ResettableIntValue defaults and works layoutFactory=ComboBoxStylePropertyLayout, domainModel=config.BrushModel), ] ''' sic, BrushPattern is called Style in Qt Need Pattern, since defaults to NoBrush and that means color is moot. If we just have Color, once it is set, no way to go back to unfilled. TODO: user friendly: if user chooses color, ensure pattern is not NoBrush ''' # TODO gradients and texture not working? def applyTo(self, morph): #print "setBrush on morph", self.instrument.color() # Morph knows it's scale and applies it to self instrument morph.scaleInstrument(self.instrument) # No baseValue, defaults to 1 # Tell Morph to use self.instrument to draw itself morph.setBrush(self.instrument) """
def fill(xml: QXmlStreamWriter, brush: QBrush, tag: str = "fill"): xml.writeStartElement(tag) if brush.gradient( ) is not None and brush.gradient().type() != QGradient.NoGradient: grad = brush.gradient() if grad.type() != QGradient.LinearGradient: xml.writeAttribute("gradient-rotation", "diagonal") else: if grad.start().x() == grad.finalStop().x(): xml.writeAttribute("gradient-rotation", "vertical") elif grad.start().y() == grad.finalStop().y(): xml.writeAttribute("gradient-rotation", "horizontal") else: xml.writeAttribute("gradient-rotation", "diagonal") xml.writeAttribute("color", grad.stops()[0][1].name()) xml.writeAttribute("gradient-color", grad.stops()[1][1].name()) else: xml.writeAttribute("color", brush.color().name()) xml.writeEndElement() #fecha fill
class BrushFormation(InstrumentFormation): ''' Specialize to Qt <QBrush> ''' def __init__(self, parentSelector, role=""): InstrumentFormation.__init__(self, name="Brush", parentSelector=parentSelector, role=role) self.instrument = QBrush() self.styleProperties=[BaseStyleProperty("Color", self.instrument.setColor, self.selector, resettableValueFactory=ResettableColorValue, layoutFactory=ColorStylePropertyLayout, default=self.instrument.color()), BaseStyleProperty("Style", # Was Pattern self.instrument.setStyle, self.selector, default=self.instrument.style(), # ResettableIntValue defaults and works layoutFactory=ComboBoxStylePropertyLayout, domainModel = config.BrushModel),] ''' sic, BrushPattern is called Style in Qt Need Pattern, since defaults to NoBrush and that means color is moot. If we just have Color, once it is set, no way to go back to unfilled. TODO: user friendly: if user chooses color, ensure pattern is not NoBrush ''' # TODO gradients and texture not working? def applyTo(self, morph): #print "setBrush on morph", self.instrument.color() # Morph knows it's scale and applies it to self instrument morph.scaleInstrument(self.instrument) # No baseValue, defaults to 1 # Tell Morph to use self.instrument to draw itself morph.setBrush(self.instrument) """
def get_half_alpha(brush: QBrush) -> QBrush: color = brush.color() color.setAlphaF(0.5) brush.setColor(color) return brush
class PFSNode(PFSElement): def __init__(self, id: str, x: int, y: int): PFSElement.__init__(self, id) self.setPos(x / 2, y / 2) self._width = 0 self._height = 0 self._pen = QPen(Qt.black) self._brush = QBrush(Qt.white, Qt.SolidPattern) self.emitter = PFSSenderSignal() self.changed = self.emitter.changed self.deleted = self.emitter.deleted self.penEdited = self.emitter.penEdited def move(self, x, y): self.moveBy(x / 2, y / 2) self.changed.emit() for it in self.scene().items(): print(str(it.__class__) + " " + str(it.shape().boundingRect())) def setPenColor(self, color: QColor): self._pen.setColor(color) self.scene().update() def setPenStyle(self, style: Qt): self._pen.setStyle(style) self.scene().update() self.penEdited.emit(self) def setPenWidth(self, width: str): self._pen.setWidth(float(width)) self.scene().update() def setBrushColor(self, color: QColor): self._brush.setColor(color) self.scene().update() def changeElementPosX(self, prop): x = PFSUndoPropertyText(prop, self.moveX) self.scene()._page._net.undoStack.push(x) def changeElementPosY(self, prop): x = PFSUndoPropertyText(prop, self.moveY) self.scene()._page._net.undoStack.push(x) def changeElementWidth(self, prop): x = PFSUndoPropertyText(prop, self.resizeWidth) self.scene()._page._net.undoStack.push(x) def changeElementHeight(self, prop): x = PFSUndoPropertyText(prop, self.resizeHeight) self.scene()._page._net.undoStack.push(x) def changeLineColor(self): color = QColorDialog.getColor(self._pen.color(), self.scene()._page._net, "Escolha a cor do contorno") if color.isValid() and color != self._pen.color(): x = PFSUndoPropertyButton(color, self._pen.color(), self.setPenColor) self.scene()._page._net.undoStack.push(x) def changeLineStyle(self, text): if text in self.PEN_LIST: x = PFSUndoPropertyCombo(self.PEN_LIST[text], self._pen.style(), self.setPenStyle) self.scene()._page._net.undoStack.push(x) def changeLineWidth(self, prop): x = PFSUndoPropertyText(prop, self.setPenWidth) self.scene()._page._net.undoStack.push(x) def changeFillColor(self): color = QColorDialog.getColor(self._brush.color(), self.scene()._page._net, "Escolha a cor do preenchimento") if color.isValid() and color != self._brush.color(): x = PFSUndoPropertyButton(color, self._brush.color(), self.setBrushColor) self.scene()._page._net.undoStack.push(x) def moveX(self, txt, update=True): self.moveBy(float(txt) / 2, 0) if update: self.scene().update() def moveY(self, txt, update=True): self.moveBy(0, float(txt) / 2) if update: self.scene().update() def resizeWidth(self, txt): self._width = float(txt) self.changed.emit() self.scene().update() def resizeHeight(self, txt): self._height = float(txt) self.changed.emit() self.scene().update()