PyQT:愚蠢的QPainter.drawEllipse

时间:2011-09-20 15:42:01

标签: python pyqt qpainter

我盯着代码的时间越长,我理解的越少,但它越有趣。在一个案例中,QPainter绘制圆圈,而在另一个案例中则不是。

我的问题是,如果成功,QPainter 不会绘制。另一方面,如果它没有成功,它确实绘制。我真正想要实现的是根据状态改变颜色。这个相当丑陋的代码是为了说明。将QP.begin()移到循环外部或者在if子句之外只有一个drawEllipse(),这没有任何区别。

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()

有人能告诉我为什么在一种情况下椭圆实际上是涂漆的而在另一种情况下它不是?

输出结果为:

  

...
  还没有   还没有   还没有   还没有   还没有   全成
  全成
  全成
  全成
  全成
  ......

椭圆是否先前绘制并不重要。如果我在“尚未” - case中注释drawEllipse(),则不会绘制圆圈。

1 个答案:

答案 0 :(得分:0)

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

我现在通过调用整个小部件的update-method来解决问题。