PyQT: 奇怪的QPainter.drawEllipse

0 投票
1 回答
3297 浏览
提问于 2025-04-17 02:41

我越看这段代码,越觉得看不懂,但却觉得越来越搞笑。有时候,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()

有没有人能告诉我,为什么在一种情况下椭圆会被画出来,而在另一种情况下却不画呢?

输出结果是:

...
还没完成
还没完成
还没完成
还没完成
还没完成
成功了
成功了
成功了
成功了
成功了
...

不管椭圆之前有没有被画过,都没关系。如果我把“还没完成”那部分的drawEllipse()注释掉,就不会画出任何圆圈。

1 个回答

1

问题出在我创建的paintEvent上。这个paintEvent是在一个包含文本框获得焦点时被调用的。但是,这个事件的更新区域只包括了文本框,这其实是有道理的,只是我之前不知道。所以虽然调用了paintEvent,但更新区域并没有包括圆圈。

现在我通过调用整个小部件的更新方法来解决这个问题,这样就没问题了。

撰写回答