【发布时间】:2012-10-15 06:24:36
【问题描述】:
有几个网页说QTreeWidgetItem可以通过删除或QTreeWidget.clearing来删除。但是我下面的代码示例似乎没有这样做。我做错什么了吗?
#!/usr/bin/python
import sys
from PySide.QtGui import QApplication, QWidget, QTreeWidget, QTreeWidgetItem
#from PyQt4.QtGui import QApplication, QWidget, QTreeWidget, QTreeWidgetItem # Result was the same with `PySide`
import time
class TreeWidgetItemChild(QTreeWidgetItem):
def __init__(self):
super(TreeWidgetItemChild, self).__init__()
print 'TreeWidgetItemChild init'
def __del__(self):
print 'TreeWidgetItemChild del'
def test_QTree_clear_children():
tree = QTreeWidget()
tree.setHeaderLabel('funksoul')
i = TreeWidgetItemChild()
tree.addTopLevelItem(i)
print 'Before clearing'
#tree.clear() # Didn't call destructor (__del__)
#tree.removeItemWidget (i, 0) # Didn't call destructor
#i.__del__() # Called destructor but it's called again afterward
del i # Didn't call destructor
time.sleep(1)
print 'After clearing'
if __name__ == '__main__':
app = QApplication(sys.argv)
test_QTree_clear_children()
打印为:
TreeWidgetItemChild init
Before clearing
After clearing
TreeWidgetItemChild del
在我看来 TreeWidgetItemChild 在进程终止时被删除,而不是我的任何删除操作。
【问题讨论】:
-
不确定 python,但在 C++ 中删除 QListWidgetItem 也会使其从列表中删除(析构函数会这样做)。
标签: python qt pyside qtreewidget qtreewidgetitem