PyQT: 奇怪的QPainter.drawEllipse
我越看这段代码,越觉得看不懂,但却觉得越来越搞笑。有时候,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,但更新区域并没有包括圆圈。
现在我通过调用整个小部件的更新方法来解决这个问题,这样就没问题了。