4

修正方法がわからないこのRuntimeErrorが発生し続けます。これが私が達成しようとしていることです。QTreeViewのさまざまなアイテムをクリックしているときに、このQTableWidgetを動的に値で更新したいと思います。ほとんどの場合、2番目の項目をクリックして、この「RuntimeError:基になるC / Cオブジェクトが削除されました」に遭遇したときにQTableWidgtを更新する必要がある場合を除いて、コードは機能します。これが私のコードの抜粋です:

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

コンパイラは、「printtableItem.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
)

そして、あなたのスロットで、それはアイテムを受け取ります:

def UpdateValues(self, tableItem):
    print '--------------------------------'
    print 'UPDATING TEXT PROPERTY VALUE!!!'
    print tableItem.text()
于 2012-06-26T19:30:00.203 に答える