加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:00:31 所属栏目:百科 来源:网络整理
导读:我一直得到这个RuntimeError,我不知道如何修复.这就是我想要完成的事情.我想在我的QTreeView中单击不同的项目时动态更新此QTableWidget的值.在大多数情况下,我的代码工作,除非我点击我的第二??个项目,我需要更新我的QTableWidgt,这是当我遇到这个“RuntimeEr
我一直得到这个RuntimeError,我不知道如何修复.这就是我想要完成的事情.我想在我的QTreeView中单击不同的项目时动态更新此QTableWidget的值.在大多数情况下,我的代码工作,除非我点击我的第二??个项目,我需要更新我的QTableWidgt,这是当我遇到这个“RuntimeError:底层C/C++对象已被删除”.这是我的代码片段:

def BuildTable( self ):
    ...
    for label in listOfLabels :
        attr = self.refAttr[label]
        self.table.setItem(row,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,label):
    print '--------------------------------'
    print 'UPDATING TEXT PROPERTY VALUE!!!'
    print tableItem.text()
    print label

编译器在行上抱怨错误,“print tableItem.text()”

谢谢!

解决方法

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

你想要的只是让itemChanged信号告诉你什么项目发生了变化.

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读