问题
I'm finding it frustratingly hard to find a simple way to delete my selected QTreeWidgetItem
.
My patchwork method involves setting the tree's current selection to current
and then:
if current.parent() is not None:
current.parent().removeChild(current)
else:
self.viewer.takeTopLevelItem(self.viewer.indexOfTopLevelItem(current))
It's not horrible, but isn't there a command that straight up just removes the item?
回答1:
The QTreeWidget
class has an invisibleRootItem() function which allows for a somewhat neater approach:
root = tree.invisibleRootItem()
for item in tree.selectedItems():
(item.parent() or root).removeChild(item)
回答2:
PyQt4 uses sip to generate the python bindings for Qt classes, so you can delete the C++ object explicitly through the sip python API:
import sip
...
sip.delete(current)
The binding generator for PySide, shiboken, has a similar module.
来源:https://stackoverflow.com/questions/12134069/delete-qtreewidgetitem-in-pyqt