代码之家  ›  专栏  ›  技术社区  ›  prattom

从其他函数更新对象创建的paintEvent的颜色

  •  1
  • prattom  · 技术社区  · 7 年前

    我通过使用创建了一个矩形 QPainter 在里面 paintEvent 功能。以下是我的代码

    def paintEvent(self, event):
        QWidget.paintEvent(self, event)
        painter = QPainter(self)
        pen = QtGui.QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine)
    
        painter.setPen(QtCore.Qt.red)
        painter.setBrush(QtGui.QColor(200, 0, 0))
        rect = QRect(1450,325,380,498)
        painter.drawRect(rect)
        painter.setFont(QtGui.QFont('Consolas', 30))
        painter.setPen(QtGui.QColor(0, 0, 0))
        painter.drawText(QRect(1450,325,380,498), QtCore.Qt.AlignCenter, str("Welcome"))
    

    如何从其他函数更新矩形的颜色和文本内容(矩形内)?

    def updateRectanle(conditon):
        if condition: 
            update_rectangle_color
            update_rectangle_text
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   eyllanesc    7 年前

    你不应该打电话 paintEvent() 正如您已经知道的,您应该做的就是告诉GUI您需要重新绘制,我们可以使用这个方法 repaint() update() . 第一个方法要求同步更新,而在第二个方法中,我更喜欢第二个方法。

    def __init__(self, foo_params):
        super(Foo_class, self).__init__(super_foo_params)
        self._text = "Welcome"
        self._rect_color = QtGui.QColor(200, 0, 0)
    
    def paintEvent(self, event):
        super(Foo_class, self).paintEvent(event)
        painter = QPainter(self)
        pen = QtGui.QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine)
    
        painter.setPen(QtCore.Qt.red)
        painter.setBrush(self._rect_color)
        rect = QRect(1450,325,380,498)
        painter.drawRect(rect)
        painter.setFont(QtGui.QFont('Consolas', 30))
        painter.setPen(QtGui.QColor(0, 0, 0))
        painter.drawText(QRect(1450,325,380,498), QtCore.Qt.AlignCenter, self._text)
    
    def updateRectanle(conditon):
        if condition: 
            self._rect_color = new_color
            self._text = new_text
            self.update()