Python 愚蠢的油漆工

Python 愚蠢的油漆工,python,pyqt,qpainter,Python,Pyqt,Qpainter,我盯着代码看的时间越长,我理解的越少,但它变得越有趣。在一种情况下,QPainter绘制圆,在另一种情况下则不绘制圆 我的问题是,如果成功,QPaint不会绘制。另一方面,如果它没有成功,则它会绘制。我真正想要实现的是根据状态改变颜色。这段相当难看的代码用于说明。将QP.begin()移到循环之外,或者在if子句之外的末尾只有一个drawerlipse()并没有任何区别 def paintEvent(self, e): # compute here diameter, offse

我盯着代码看的时间越长,我理解的越少,但它变得越有趣。在一种情况下,QPainter绘制圆,在另一种情况下则不绘制圆

我的问题是,如果成功,QPaint不会绘制。另一方面,如果它没有成功,则它会绘制。我真正想要实现的是根据状态改变颜色。这段相当难看的代码用于说明。将QP.begin()移到循环之外,或者在if子句之外的末尾只有一个drawerlipse()并没有任何区别

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()
有人能告诉我为什么在一种情况下椭圆实际上是画的,而在另一种情况下它不是

输出为:


还没有
还没有
还没有
还没有
还没有
成功的
成功的
成功的
成功的
成功的
...


椭圆之前是否绘制过并不重要。如果我在“not yet”(尚未)的情况下对Drapellipse()进行注释,则不会绘制圆。

问题是我创建的paintEvent的来源。当包含的文本框获得焦点时调用paintEvent。但是事件的更新区域只包含文本框,这实际上是有意义的,但我不知道。因此调用了paintEvent,但更新区域不包括圆

我现在通过调用整个小部件的update方法来规避这个问题,解决了这个问题