2012-08-26 38 views
9

Tôi thấy khó tìm ra một cách đơn giản để xóa QTreeWidgetItem đã chọn của mình.Xóa QTreeWidgetItem trong PyQt?

phương pháp chắp vá của tôi liên quan đến thiết lập lựa chọn hiện tại của cây để current và sau đó:

if current.parent() is not None: 
    current.parent().removeChild(current) 
else: 
    self.viewer.takeTopLevelItem(self.viewer.indexOfTopLevelItem(current)) 

Đó không phải là khủng khiếp, nhưng không phải là có một lệnh đó thẳng lên chỉ loại bỏ các mục?

+0

Tôi tin rằng bạn là cách chính xác. Trong C++, bạn có thể đơn giản xóa mục, do đó gọi trình phá hủy của nó, và điều đó sẽ loại bỏ mục khỏi widget. Nhưng tôi không nghĩ rằng có một cách trực tiếp để làm điều đó từ Python. – Avaris

Trả lời

10

Lớp QTreeWidget có chức năng invisibleRootItem() cho phép cho một cách tiếp cận hơi gọn gàng:

root = tree.invisibleRootItem() 
for item in tree.selectedItems(): 
    (item.parent() or root).removeChild(item) 
4

PyQt4 sử dụng ngụm để tạo ra các bindings python cho các lớp Qt, vì vậy bạn có thể xóa các đối tượng C++ một cách rõ ràng thông qua the sip python API:

import sip 
... 
sip.delete(current) 

Trình tạo liên kết cho PySide, shiboken, có a similar module.

+0

Đẹp +1. Tôi không biết điều đó. – Avaris

+0

Tôi sẽ sử dụng điều này trong tương lai, nhưng tôi đã đi với câu trả lời khác. Cảm ơn mặc dù! – RodericDay