Pyside程序锁定以响应复选框单击

时间:2012-08-29 17:54:51

标签: python qt4 pyside

我有一个非常奇怪的问题。每当检查QCheckBox时,它都会按预期调用drawall。然而,当drawall完成时,它完全挂起。我已经尝试在点击时直接调用drawall(版本2),但没有运气,结果是一样的。

scene = QGraphicsScene(0, 0, 500, 500)

class SurrogateBeat(QGraphicsItem):
    def __init__(self,beat,top):
        super(SurrogateBeat, self).__init__()
        print "Init"

class Test(QWidget):
    def __init__(self):
        self.drawAll = QCheckBox("Draw all frames on screen",self)
        self.drawAll.stateChanged.connect(self.onDrawAllClicked)

    def onDrawAllClicked(self):                #Version 1
        QTimer.singleShot(0, self.drawall)

    def onDrawAllClicked(self):                #Version 2 (neither work)
        self.drawall()

    def drawall(self):
        if self.drawAll.checkState() ==  Qt.CheckState.Checked: 
            self.surrogates=[]
            for b in range(0,len(self.item.beats)):
                print "Loop"
                surrogate = SurrogateBeat(b, self.item)
                scene.addItem(surrogate)
                self.surrogates.append(surrogate)
            scene.update()
            print "Update"

循环打印出16次,SurrogateBeat的 init 打印出来以便调用它,但是在“Update”打印出来后,程序挂起。

1 个答案:

答案 0 :(得分:2)

QGraphicsItem是一个抽象基类。

至少,您的SurrogateBeat子类需要重新实现boundingRectpaint函数。