2013-09-05 3 views
0

У меня есть программа, которая загружает файл с жесткого диска, с инструкциями рисовать несколько квадратов размером 50x50 пикселей. У меня также есть два ComboBox es, которые должны влиять на представленные квадраты. В основном, две 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 используется для размещения PushButton и ComboBox в правой части экрана . 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 эс к функции, называем update функция:

Linking,

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

функцию,

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

Обратите внимание, что при загрузке графического интерфейса пользователя в первый раз посылается сигнал currentIndexChanged.