在更改窗口之前,pyQt窗口不会更新

时间:2013-09-05 14:19:25

标签: python combobox pyqt paintevent

我有一个从硬盘驱动器加载文件的程序,其中包含绘制几个50x50像素正方形的指令。我还有两个ComboBox es应该对呈现的正方形产生影响。基本上,两个ComboBox es给出文件夹和文件名。

每当我调用ComboBox时,我都可以告诉我调用paint事件,并根据选择更新用于绘制tile的指令。但是,直到我切换到另一个窗口然后转回原始窗口,才会更新显示的方块。

以下是我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)

那么,是什么阻碍了瓷砖的绘制?

1 个答案:

答案 0 :(得分:1)

我通过将ComboBox es链接到调用update函数的函数来解决这个问题:

链接,

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

功能,

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

请注意,首次加载gui时,会发送currentIndexChanged信号。