6
votes

Pyqt - Obtenir la liste de tous enregistrés dans qtreeewidget

Je construis une application simple pour ouvrir un dossier de données et tracer ces données. Importation des données de données Un Qtreeewidget indique quels signaux sont disponibles pour tracer. Ex:

entrer la description de l'image ici p>

Le qtreewidget est peuplé une fois que les données sont remplies. Importé à l'aide de: P>

def update_treeWidget(self):
    headers = self.df['voltage recording'].columns[1:]
    sweeps = self.df['voltage recording'].index.levels[0]

    for header in headers:
        parent_item = QtWidgets.QTreeWidgetItem(self.treeWidget)
        parent_item.setCheckState(0, QtCore.Qt.Unchecked)
        parent_item.setText(0, header)

        for sweep in sweeps:
            child_item = QtWidgets.QTreeWidgetItem(parent_item)
            child_item.setCheckState(0, QtCore.Qt.Unchecked)
            child_item.setText(0, sweep)


0 commentaires

3 Réponses :


6
votes

le figuré. Cela atteint au moins ce dont j'avais besoin pour atteindre:

def find_checked(self):
    checked = dict()
    root = self.treeWidget.invisibleRootItem()
    signal_count = root.childCount()

    for i in range(signal_count):
        signal = root.child(i)
        checked_sweeps = list()
        num_children = signal.childCount()

        for n in range(num_children):
            child = signal.child(n)

            if child.checkState(0) == QtCore.Qt.Checked:
                checked_sweeps.append(child.text(0))

        checked[signal.text(0)] = checked_sweeps

    return checked


1 commentaires

Quelle est la différence entre invisiblerootitem et toplevelitemcount?



1
votes

La solution suivante peut être utilisée:

for item in self.QTreeWidget.findItems("", Qt.MatchContains | Qt.MatchRecursive):
    if (item.rowCount() == 0 and item.checkState()>0):
        print (item.text(),item.checkState())


0 commentaires

1
votes

cinq ans plus tard, je cherchais une réponse à votre deuxième question. Bien que le code de Dan_g a été très utile, je pense que cela ne répertoriera pas tous les éléments si la profondeur de l'arborescence est supérieure à 2. J'ai créé une version récursive qui répertoriera tous les éléments sélectionnés, quel que soit leur niveau dans l'arborescence.

    def get_selected_leaves(self):
        checked_items = []
        def recurse(parent_item):
            for i in range(parent_item.childCount()):
                child = parent_item.child(i)
                grand_children = child.childCount()
                if grand_children > 0:
                    recurse(child)
                else: 
                    if child.checkState(0) == Qt.Checked:
                        checked_items.append(child.text(0))

        recurse(self.ui.treeWidget.invisibleRootItem())
        return checked_items


0 commentaires