PyQt4 - “RuntimeError:底层C / C对象已被删除”

时间:2012-06-26 18:40:01

标签: pyqt4

我一直得到这个RuntimeError,我不知道如何修复。这就是我想要完成的事情。我想在我的QTreeView中单击不同的项目时动态更新此QTableWidget的值。在大多数情况下,我的代码工作,除非我点击我的第二​​个项目,我需要更新我的QTableWidgt,这是当我遇到这个“RuntimeError:底层C / C对象已被删除”。这是我的代码片段:

def BuildTable( self ):
    ...
    for label in listOfLabels :
        attr = self.refAttr[label]
        self.table.setItem(row, 0, QtGui.QTableWidgetItem( label ) )

        tableItem = QtGui.QTableWidgetItem( str(attr.GetValue()) )
        self.table.setItem(row, 1, tableItem )
        someFunc = functools.partial( self.UpdateValues, tableItem, label )                     

        QtCore.QObject.connect(self.table, QtCore.SIGNAL('itemChanged(QTableWidgetItem*)'), someFunc)   

def UpdateValues(self, tableItem, label):
    print '--------------------------------'
    print 'UPDATING TEXT PROPERTY VALUE!!!'
    print tableItem.text()
    print label

编译器在行上输出错误“print tableItem.text()”

THX!

1 个答案:

答案 0 :(得分:1)

我认为问题在于你正在使用QTableWidget项绑定回调并建立许多连接(坏)。物品可以改变。因此,可以删除它们,使您的回调失效。

你想要的是让itemChanged信号告诉你哪一项发生了变化,一旦它发生。

self.table = QtGui.QTableWidget()
...
# only do this once...ever...on the init of the table object
QtCore.QObject.connect(
    self.table, 
    QtCore.SIGNAL('itemChanged(QTableWidgetItem*)'), 
    self.UpdateValues
)

然后在您的SLOT中,它将收到该项目:

def UpdateValues(self, tableItem):
    print '--------------------------------'
    print 'UPDATING TEXT PROPERTY VALUE!!!'
    print tableItem.text()