QTreeWidget::selectedItems()
-
Hallo Karl-Heinz,
im Gegensatz zurQList
-Klasse in C++ sind Listen in Python implizit, siehe hier.
Wie gesagt, bin ich keine Python, aber in etwa sollte Dir...
len(self.w.katTWKategorien.selectedItems())
...die Anzahl der selektierten Items und
self.w.katTWKategorien.selectedItems()[0]
...den Pointer aufs erste Item liefern.
LG
Axel -
Hallo Axel,
ja Du hast recht. Aber.
In Python kann ich mit Pointern nichts anfangen.
Wenn ich die analogie zur Klasse QTableWidgetItem nehme gibt es dort Functionen
wie raw oder text. die geben mir bezüge zum selectierten Item.
So wie ich das sehe gibt es dies bei QtreeWidgetItem nicht.
Weiß Du dazu eine Lösung?
Gruß
Karl-Heinz -
@kahemenne said in QTreeWidget::selectedItems():
So wie ich das sehe gibt es dies bei QtreeWidgetItem nicht.
Gibt es was nicht? QtreeWidgetItem ist nur ein Item in einem QTreeWidget. Selectieren kann man in einem QTreeWidget, nicht QtreeWidgetItem.
-
@kahemenne said in QTreeWidget::selectedItems():
Ja das ist richtig, aber man bekommt ein QtreeWidgetItem zurück.
Ja eben... man bekommt eine Liste mit allen selektierten Items im TreeWidget.
Wenn nur ein Item markiert ist, hat die Liste auch nur ein Element.
Verstehe das Problem nicht :) -
@kahemenne said in QTreeWidget::selectedItems():
ich bekomme keine Liste und kein Item, sondern einen Zeiger auf etwas zurück.
Das bezweifle ich. Zeiger an sich gibt es in Python nicht.
Ich glaub, irgendwie reden wir alle aneinander vorbei.
Im ursprünglichen Code schreibst du:
print(f'selectedItems: {self.w.katTWKategorien.selectedItems()}')
Und bekommst
selectedItems: [<PySide6.QtWidgets.QTreeWidgetItem object at 0x00000233409EAF80>]
Um die Ausgabe mal auseinander zu brechen:
selectedItems
ist natürlich der Text, den du selbst im "print" geschrieben hast.- Darauf folgt ein Inhalt in eckigen Klammern, der bei Python auf die Ausgabe eines Containers vom Typ "List" hinweist. (Steht ja auch in der Doku: "Returns a list of all selected non-hidden items.")
- Zwischen den
[... ]
befindet sich der Inhalt der Liste... In deinem Fall genau ein Objekt, vom TypPySide6.QtWidgets.QTreeWidgetItem
, also einQTreeWidgetItem
. Dasat 0x00....
beschreibt nur den Speicher, wo sich das Objekt befindet. Das heißt nicht, dass du einen Pointer bekommst.
Ohne
__str__
Funktion kann man Python-Objekte nicht mitprint()
einfach so "ausgeben". Weil ja auch nicht bekannt ist, was von dem Objekt ausgegeben werden sollte (woher auch?!). Das, was du da siehst, ist die "Standard-Ausgabe" eines Objekts, wenn man das so nennen will, bestehend aus dem Typ bzw. der Klasse des Objekts und eben dem Speicher.
Jedenfalls ist es kein Pointer und alles funktioniert so, wie es soll :)Vielleicht hab ich das alles jetzt ein wenig zu "klein" erklärt, aber ich hoffe, es ist verständlich.
Nutze selbst Qt zu 99% nur in C++Edit:
Versuch mal (Code nicht getestet):
print(f'selectedItems: { self.w.katTWKategorien.selectedItems()[0].text(0) }')
Dies sollte dir den Text in der ersten Spalte des ersten Items zurückgeben... vorausgesetzt dort steht etwas. So kannst du verifizieren, dass dein selektiertes Item auch das ist, was selektiert ist.
-
@Pl45m4
Hallo,
danke das war der entscheidene Tip. Zwar von Pyside2, da git es ein Argument.
in Qt 6.4
QString QTableWidgetItem::text() constReturns the item's text.
See also setText().
gibt es kein Argument. Und das führt zu einem Fehler.Nochmals Danke.
Gruß
Karl-Heinz -
@kahemenne said in QTreeWidget::selectedItems():
QString QTableWidgetItem::text() const
Ja bin bei der alten PySide2 Doku gelandet :) Wie gesagt, nutze PyQt kaum bis gar nicht...
Aber du hast jetzt TABLE- und TREE-Widget verwechselt. Was ist es denn in echt? Tree oder TableWidget. Bei TreeWidget wird eine Spalte erwartet, da dein "Baum" ja mehrere Ebenen/Spalten haben kann.
Hier nochmal die PySide6 Doku.
PySide6.QtWidgets.QTreeWidgetItem.text(column) Parameters column – int Return type str Returns the text in the specified column.