2011-09-20 52 views
1

我盯着代码的时间越长,我就越不了解它,但它更有趣。在一个案例中,QPainter绘制圆圈,在另一个案例中没有。PyQT:傻QPainter.drawEllipse问题

我的问题是,如果成功,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(),则不绘制圆。

回答

0

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

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

+0

你可以接受你自己的答案。 – aukaost