2011-09-20 286 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