Обновление цвета объекта, созданного paintEvent из другой функции - PullRequest
0 голосов
/ 03 октября 2018

Я создал прямоугольник с помощью функции 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 Ответ

0 голосов
/ 03 октября 2018

Вы не должны вызывать 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()
...