2013-09-05 55 views
0

我有一個程序,從硬盤驅動器加載一個文件,並指示繪製幾個50x50像素的正方形。我也有兩個ComboBoxES這應該對呈現的正方形產生影響。基本上,兩個ComboBox es給文件夾和文件名稱。pyQt窗口不更新,直到我改變窗口

每次我打電話給ComboBox,我都可以看到我稱之爲繪畫事件,並且基於選擇來更新用於繪製瓷磚的說明。但是,直到我切換到另一個窗口,然後回到原來的窗口,顯示的方塊纔會更新。

下面是我的paintEvent look

def paintEvent(self,event): 
    self.updateButtons() 
    self.updateNameCombo() 
    qp = QtGui.QPainter() 
    qp.begin(self) 
    self.paintTiles(qp) 
    qp.end() 
    return 

updateButton被用來放置PushButtonComboBox屏幕. UpdateNameComobo is used to update one of the comboBoxes and painTiles``的右側是用來在屏幕上繪製的正方形。

def paintTiles(self,qp): 
     self.loadTileSet() 
     width= self.frameSize().width() 
     height = self.frameSize().height() 
     self.endX = width - 120 
     self.endY = width - 25 
     x = self.startX 
     y = self.startY 
     i = self.startI 
     while i < len(self.tiles): 
      self.handleTile(qp,x,y,self.tiles[i]) 
      i += 1 
      x += 60 
      if x >= self.endX - 60: 
       x = self.startX 
       y += 60 
      if y >= self.endY - 60: 
       break 
     return 

loadTileSet用於從硬盤讀取磁貼數據。和handleTile用於繪製單個正方形。

def handleTile(self,qp,x,y,tile): 
     pen = QtGui.QPen(QtCore.Qt.blue, 1, QtCore.Qt.DotLine) 
     for line in tile: 
      r,g,b,a = tile[line] 
      clr = QtGui.QColor(r,g,b,a) 
      pen.setColor(clr) 
      qp.setPen(pen) 
      pX = x + line[0] 
      pY = y + line[1] 
      qp.drawPoint(pX,pY) 

那麼,什麼是阻止瓷磚的繪圖?

回答

0

我解決了這個由ComboBox ES鏈接到調用update函數的函數:

鏈接,

self.nameCombo.currentIndexChanged.connect(self.comboChanged) 

功能,

self.comboChanged(self): 
    self.updateComboData() 
    self.update() 

注意,加載GUI時第一次發送currentIndexChanged信號。