2013-09-05 58 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信号。