tableWidet - selectedItems - Wert auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

Nochmals danke für die Hilfe vorhin, aber ich steh nochmal auf dem Schlauch.

Und zwar möchte ich mit selectedItems() aus einem tableWidget die markierten Zellen auslesen. Leider kommt das Ergebnis nur in Maschinensprache. Was muss ich tun, damit die Werte wirklich lesbar sind?

Vielen Dank schonmal.
Benutzeravatar
__blackjack__
User
Beiträge: 14042
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Cortez: Was meinst Du mit ”Maschinensprache”? Die Methode liefert eine Liste mit `QTableWidgetItem`-Objekten. Von denen kann man alles mögliche abfragen und auch setzen.

Edit: Ist das auch das richtige? Also Du hast tatsächlich ”2D-Daten” wo jede Zelle ein eigenes Datum ist das nichts/nicht viel mit seinen Nachbarzellen, sowohl horizontal als auch vertikal, zu tun hat?
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

__blackjack__ hat geschrieben: Freitag 19. April 2019, 20:24 @Cortez: Was meinst Du mit ”Maschinensprache”? Die Methode liefert eine Liste mit `QTableWidgetItem`-Objekten. Von denen kann man alles mögliche abfragen und auch setzen.

Edit: Ist das auch das richtige? Also Du hast tatsächlich ”2D-Daten” wo jede Zelle ein eigenes Datum ist das nichts/nicht viel mit seinen Nachbarzellen, sowohl horizontal als auch vertikal, zu tun hat?
Also ich hab folgenden Code:
items = hauptfenster.tableWidget.selectedItems()
print (items)
Und erhalte Ausgabe dieser Art: PyQt5.QtWidgets.QTableWidgetItem object at 0x78558698

Also ich kann Werte setzen mit setItem. Das klappt auch. Sowohl in verschiedene Reihen, als auch Spalten, falls du das meinst.
Benutzeravatar
__blackjack__
User
Beiträge: 14042
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Cortez: Naja, da sind noch eckige Klammern drum herum, denn das ist ja wie gesagt eine *Liste* mit allen selektierten Elementen. Und ”spitze Klammern” welche die einzelnen Repräsentationen der Objekte in der Liste einfassen, wie das so Konvention für diese Art der Darstellung ist, und wenn mehr als ein Objekt in der Liste steckt, dann auch noch Kommas zwischen den Werten/deren `repr()`-Darstellung.

Die Objekte in der Liste kannst Du Dir jetzt halt näher anschauen. Ist ja nicht so als wenn nicht dokumentiert wäre was so ein `QTableWidgetItem` an Methoden hat. Und ich meinte nicht das setzen eines ganzen Items, sondern die Daten und Eigenschaften auf dem jeweiligen Item.

Wenn Du die Items mit `setItem()` setzt, dann kennst Du die `QTableWidgetItem`-Klasse doch bereits und hattest so ein Objekt auch vorher schon mal in den Fingern, da ja selbst erstellt.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

__blackjack__ hat geschrieben: Freitag 19. April 2019, 21:18 @Cortez: Naja, da sind noch eckige Klammern drum herum, denn das ist ja wie gesagt eine *Liste* mit allen selektierten Elementen. Und ”spitze Klammern” welche die einzelnen Repräsentationen der Objekte in der Liste einfassen, wie das so Konvention für diese Art der Darstellung ist, und wenn mehr als ein Objekt in der Liste steckt, dann auch noch Kommas zwischen den Werten/deren `repr()`-Darstellung.

Die Objekte in der Liste kannst Du Dir jetzt halt näher anschauen. Ist ja nicht so als wenn nicht dokumentiert wäre was so ein `QTableWidgetItem` an Methoden hat. Und ich meinte nicht das setzen eines ganzen Items, sondern die Daten und Eigenschaften auf dem jeweiligen Item.

Wenn Du die Items mit `setItem()` setzt, dann kennst Du die `QTableWidgetItem`-Klasse doch bereits und hattest so ein Objekt auch vorher schon mal in den Fingern, da ja selbst erstellt.
Ist mir schon klar, dass das Objekte sind. Aber man kann doch auch Objekte in einer Liste anzeigen lassen. Ich möchte doch nur erreichen, dass, wenn in Zelle(1,0) jetzt "Osterhase" steht, dass ich mir das Wort Osterhase dann in der Kommandozeile ausprinten lassen kann.
Benutzeravatar
__blackjack__
User
Beiträge: 14042
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Cortez: Na dann musst Du von den Objekten in der Liste halt den Text abfragen.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

__blackjack__ hat geschrieben: Freitag 19. April 2019, 21:56 @Cortez: Na dann musst Du von den Objekten in der Liste halt den Text abfragen.

Code: Alles auswählen

print (hauptfenster.tableWidget.selectedItems().text)
So funktionierts schonmal nicht. Ich google schon seit nahezu 2 Stunden und habe immernoch keinen Ansatz dafür. Braucht man dafür eventuell eine repr-Funktion, mit der man ein Objekt als string darstellen kann?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst schon in einer Schleife über die items gehen, und auf jedem einzelnen dann die Methode aufrufen , mit der du ihren Text erhältst.
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

das mit der Schleife leuchtet ein. Nach der gängigen Methode suche ich mittlerweile 3 Stunden erfolglos...
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

@Cortez: ich verstehe nicht, wie man drei Stunden erfolglos Suchen muß, wenn hier schon auf die richtige Stelle in der Dokumentation verwiesen wurde?

Hier (https://doc.qt.io/qt-5/qtablewidget.html#selectedItems) steht, dass selectedItems eine Liste von QTableWidgetItem zurückliefert und wie man mit Liste umgeht, gehört zu den absoluten Grundlagen von Python.

Da Du aber nur per Copy-Paste programmieren willst, liefert auch eine Google-Suche innerhalb von 3 Sekunden ein Ergebnis: https://pythonspot.com/pyqt5-table/
Antworten