2017-10-20 6 views
0

Der Code erstellt einen einzelnen Dialog mit QTreeWidget und einer Schaltfläche. Wenn Sie auf die Schaltfläche klicken, möchte ich alle untergeordneten Elemente des aktuell ausgewählten Root-Elements löschen. Wie erreiche ich das?So löschen Sie die untergeordneten Objekte von QTreeWidgetItem

enter image description here

app = QApplication([])   
class Dialog(QDialog): 
    def __init__(self, *args, **kwargs): 
     super(Dialog, self).__init__() 
     self.setLayout(QVBoxLayout()) 

     self.tree = QTreeWidget(self) 
     self.tree.setHeaderLabels(['Column name']) 
     for i in range(3): 
      root_item = QTreeWidgetItem() 
      root_item.setText(0, 'Root %s' % i) 
      self.tree.addTopLevelItem(root_item) 
      for n in range(3): 
       childItem = QTreeWidgetItem(root_item) 
       childItem.setText(0, 'Child %s' % n) 
      root_item.setExpanded(True) 

     btn = QPushButton(self) 
     btn.setText("Delete the selected Root item's child items") 
     btn.clicked.connect(self.onClick) 
     self.layout().addWidget(self.tree) 
     self.layout().addWidget(btn) 
     self.show() 

    def onClick(self): 
     current_item = self.tree.currentItem() 
     if not current_item: 
      print 'Please select root item fist' 
     elif current_item.parent(): 
      print 'Child item is selected. Please select root item instead.' 
     else: 
      print 'Root item selected. Number of children: %r' % current_item.childCount()  

tree = Dialog() 
app.exec_() 
+0

Das Bild, das Sie zeigt, sind ein wenig verwirrend, da Sie ein Element ausgewählt haben, die Kinder nicht haben, nehme ich an, dass Sie, wenn Sie wählen ein Element mit Kindern, nur Ihre Kinder werden gelöscht. Ich habe recht? – eyllanesc

+0

Das Stammelement muss ausgewählt sein, um seine untergeordneten Elemente zu löschen. Wenn das untergeordnete Element ausgewählt ist, passiert nichts. Es wird nur der Hinweis ausgegeben, dass der Benutzer ein Stammelement auswählen muss. – alphanumeric

+0

Wenn ich * Root 0 * wähle, erhalte ich die folgende Nachricht * Bitte wählen root item fist * – eyllanesc

Antwort

1

versuchen Sie dies:

current_item = self.tree.currentItem() 
children = [] 
for child in range(current_item.childCount()): 
    children.append(current_item.child(child)) 
for child in children: 
    current_item.removeChild(child) 
Verwandte Themen