PyQT: глупый QPainter.drawEllipse - PullRequest
       13

PyQT: глупый QPainter.drawEllipse

0 голосов
/ 20 сентября 2011

Чем дольше я смотрю на код, тем меньше я его понимаю, но тем смешнее становится. В одном случае QPainter рисует круги, в другом - нет.

Моя проблема в том, что в случае успеха QPainter не рисует. Если, с другой стороны, он не был успешным, он делает ничью. Чего я действительно хочу добиться, так это менять цвет в зависимости от состояния. Этот довольно уродливый код для иллюстрации. Перемещение QP.begin () вне цикла или наличие только одного drawEllipse () в конце вне предложения if не имеет никакого значения.

def paintEvent(self, e):
        # compute here diameter, offsets, etc. but nothing qt related
        for i in xrange(5):
            painter = QtGui.QPainter(self)
            x_offset += 5
            if self.isSuccessful():
                print "Successful"
                painter.setBrush(QtGui.QColor(0,255,0))
                painter.drawEllipse(x_offset, y_offset, diameter, diameter)
            else:
                print "Not yet"
                painter.setBrush(QtGui.QColor(0,0,255))
                painter.drawEllipse(x_offset, y_offset, diameter, diameter)
            painter.end()

Может кто-нибудь сказать мне, почему в одном случае эллипс на самом деле окрашен, а в другом - нет?

Вывод:

...
Еще нет
Еще нет
Еще нет
Еще нет
Еще нет
* 1021 успех * * 1022 успех * * 1023 К успеху * * 1024 успех * * 1025 успех * ...

Не имеет значения, был ли эллипс нарисован ранее или нет. В случае, если я комментирую drawEllipse () в случае «еще нет», круг не рисуется.

1 Ответ

0 голосов
/ 21 сентября 2011

Проблема была в источнике PaintEvent, который я создал. PaintEvent был вызван, когда содержащее текстовое поле получило фокус. Но область обновления для события включала только текстовое поле, которое на самом деле имеет смысл, но я не знал. Итак, paintEvent был вызван, но область обновления не включала круги.

Теперь я обошел проблему, вызвав метод обновления для всего виджета, который решает проблему.

...