PyQt Baum-Widget hinzufügen die Kontrollkästchen für die dynamische Entfernung
Ich bin versucht, erstellen Sie eine Baum-widget, das im wesentlichen ermöglicht es dem Nutzer, verschiedene Aufschlüsselungen der Daten und die Möglichkeit zum löschen bestimmter Elemente. Um dies zu tun, ich möchte ein Kontrollkästchen im Zusammenhang mit der jeweiligen top-level-Element und jedes Kind so kann der Benutzer wählen, welche top-level-Elemente (und damit alle Kinder, die top-level-Element) zu löschen. Oder die bestimmte Kinder zu löschen. Um Ihnen eine bessere Idee habe ich ein Beispiel erstellt, wobei [x] für einen geprüften Kontrollkästchen und [ ] steht für eine leere checkbox:
>Beverages Allowed in Stadium [ ]
Soda [ ]
Water [ ]
Tea [ ]
Spirits [X]
Ale [ ]
>Tickets [X]
Row A [X]
Row B [X]
Row C [X]
Lawn [X]
Irgendwelche Vorschläge, wie dies umzusetzen? Ich weiß nicht, ob es einen Unterschied macht, so weit wie Schwierigkeiten, aber ich habe zugeteilt, eine separate Spalte für die Kontrollkästchen.
InformationsquelleAutor sudobangbang | 2015-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zusätzlich zu den Antwort Sie zur Verfügung gestellt haben, können Sie vereinfachen Ihre Logik durch die Verwendung der
ItemIsTristate
Flagge auf der übergeordneten Elemente.Den drei wichtigsten code-Zeilen sind:
Dies setzt man bis das übergeordnete element ein drei-Status-Kontrollkästchen.
Diese Einrichtung das Kind ausgewählt werden, und legen Sie die standardmäßig nicht aktiviert. Wenn das Kind die checkbox nicht gegeben, ein Zustand, der checkbox-element nicht angezeigt.
Der obige code baut eine sehr einfache Struktur.
Jedoch, wenn ich eine check-box, die auf das übergeordnete element, das alle Kinder sind automatisch ausgewählt:
Wenn, ich wünschte, wählen Sie ein einziges Kind, den Eltern tritt in den teilweise ausgewählt (Tri-State):
Wenn alle Kinder, die deaktiviert sind, werden die Eltern automatisch deaktiviert. Wenn die Eltern ist die Option deaktiviert, werden alle Kinder automatisch deaktiviert sowie.
Das ist abhängig von deiner OS-und widget-Stil. Es gibt weitere Dokumentation auf dem hier, aber das ist wahrscheinlich außerhalb des Bereichs für diese konkrete Frage.
Okay, gibt es eine Möglichkeit, einfach deaktivieren, das ganze zu füllen und es so machen, es hat nur die check-option?
Wenn Sie nur wollen, dass es eine binäre checkbox und nicht ein Tristate-box, entfernen Sie die
Qt.ItemIsTristate
Flagge und fügen Sieparent.setCheckState(0, Qt.Unchecked)
(wieder eine checkbox-Zustand erforderlich ist, für es zu zeigen). Dies wird fügen Sie das Kontrollkästchen, um das übergeordnete Element. Sie verlieren die automatische Auswahl und Abwahl von Kindern durch entfernen der tri-State-flag aber.gibt es eine einfache Möglichkeit, um eine Liste aller Felder, die derzeit aktiviert sind? Abgesehen vom schreiben einer Schleife, dass durchläuft den gesamten Baum-die überprüfung aller Elemente checkstate?
InformationsquelleAutor Andy
QTreeWidgetItem
hat tatsächlich eine eingebaute Kontrollkästchen, die Sie verwenden können, ziemlich leicht.Zum Beispiel:
InformationsquelleAutor sudobangbang
Dies ist nicht die Antwort auf deine Frage, eher, wie Sie verwenden Sie die Kontrollkästchen, sobald Sie Sie haben. Ich benutzte das Beispiel von oben die Antwort als korrekt markiert. Es hat funktioniert, aber dann, als ich versuchte, herauszufinden, wie zu wissen, welche Checkboxen markiert wurden, und ich hatte eine Menge Fragen. Nach viel suchen habe ich eine Lösung gefunden, die für mich gearbeitet, wie ich sehe, gibt es nicht viel doc, so möchte ich einen Datensatz für die Zukunft. Nur um zu erwähnen, dass ich mehrere Lösungen, wie invisibleRootItem, um zu finden, die Kinder von den Eltern, aber das hat nicht funktioniert.
Landete ich mit der Klasse QTreeWidgetItemIterator mit einem flag-QtGui.QTreeWidgetItemIterator.Überprüft, um zu retreive der text der Checkboxen markiert, und ich kann weiter arbeiten.
den link zu der Dokumentation http://ftp.ics.uci.edu/pub/centos0/ics-custom-build/BUILD/PyQt-x11-gpl-4.7.2/doc/html/qtreewidgetitemiterator.html und ein Beispiel https://riverbankcomputing.com/pipermail/pyqt/2014-May/034315.html
InformationsquelleAutor chucho21