4

我不断收到这个 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()”这一行抱怨错误

谢谢!

4

1 回答 1

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()
于 2012-06-26T19:30:00.203 回答