Inhalt eines selektierten Items einer QTableWidget ausgeben

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Caldar
User
Beiträge: 46
Registriert: Sonntag 17. Mai 2009, 18:20

Ich habe mittels QTableWidget eine Tabelle angelegt und mit Werten befüllt.
Nun möchte ich den Wert der ersten Spalte der selektierten Row auslesen.
Aber ich schaffe das nicht.
Kann mir jemand einen Tipp geben?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Das Leben ist wie ein Tennisball.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Code: Alles auswählen

indexes = [index for index in table_widget.selectedIndexes() if index.row() == 0]
data = map(table_widget.model().data, indexes)
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

oder so (ungetestet)

Code: Alles auswählen

zeile = tabelle.selectedItems()[0].row()
item = tabelle.item(zeile, 0)
http://www.kinderpornos.info
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

@Dill selectedItems ist unsortiert.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Oh, stimmt. Ich hätte besser aufpassen sollen.
Caldar
User
Beiträge: 46
Registriert: Sonntag 17. Mai 2009, 18:20

Danke für Eure Bsp., es ist aber so, dass diese nur den Objektnamen zurückgeben.
Ich bekomme also so etwas wie :
PyQt4.QtCore.QModelIndex object at 0x018AB420
wenn ich versuche, das Feld mit print aufzurufen. Ich mache hier einen ganz gravierenden Fehler, aber ich komme partout auf keinen grünen Zweig.
Ich möchte aber den Wert des 1.Elements der selektierten Reihe .
Die Doku auf http://docs.huihoo.com/pyqt/pyqt4/html/ ... idget.html ist mir natürlich wohlbekannt, aber ich habe Schwierigkeiten, den Wert des Felds auszulesen und nicht dessen Objektnamen.

Ich habe den folgenden Code probiert:

Code: Alles auswählen

zeile = self.tabWidget.selectedItems()[0].row()
item = self.tabWidget.item(zeile, 0)
print item
und bekomme dann den Objektnamen wie oben angegeben (wohl des 1.Elements der selektierten Reihe), aber wie bekomme ich den Inhalt, meinetwegen als String (obwohl das Zahlen sind).
lunar

RTFM

Im Übrigen verwaltet QTableWidget nun mal nur Zeichenketten. Für andere Datentypen musst du ein eigenes Modell implementieren.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

das kann nicht sein, dass du da ein PyQt4.QtCore.QModelIndex object bekommst:
QTableWidget Class Reference
QTableWidgetItem item (self, int row, int column)
sicher, dass self.tabWidget ein QTableWidget ist?
http://www.kinderpornos.info
Caldar
User
Beiträge: 46
Registriert: Sonntag 17. Mai 2009, 18:20

Dill hat geschrieben: sicher, dass self.tabWidget ein QTableWidget ist?
Ja, ich habe es vorher so angelegt:

Code: Alles auswählen

self.tabWidget = QTableWidget()
Caldar
User
Beiträge: 46
Registriert: Sonntag 17. Mai 2009, 18:20

Ich glaube, ich habe folgendes in der Dokumentation überlesen:

QString QTableWidgetItem.text (self)
Returns the item's text.

Folgender Code liest den Inhalt des Elements der selektierten Zeile als Text aus und löst somit mein Problem:


Code: Alles auswählen

zeile = self.tabWidget.selectedItems()[0].row()
item = self.tabWidget.item(zeile, 0)
print item.text()
Gibt es die PyQt-Doku auch in deutsch bzw ohne dieses ganze C++-Gedöns? (und ja, ich weiss, dass PyQt auch nur ein Wrapper für Qt ist..aber verstehe den Sinn nicht, wenn z.B. folgende C++-Syntax in einer Python-Doku zu lesen ist):

QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(
pow(row, column+1)));
tableWidget->setItem(row, column, newItem);
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

ja, aber du müsstest konsequenterweise PyQt4.QtCore.QModelIndex referenz schauen und die hat keine text() methode. :?

die referenz gibt es sicher nicht auf deutsch.
wie du gesehen hast ist sie nochnichtmal komplett von C++ nach python übersetzt. aber stört das wirklich? wenn du dich damit angefreundet hast wirst du dich freuen, dass es für Qt nen haufen guter literatur gibt (für die C-version).
http://www.kinderpornos.info
Caldar
User
Beiträge: 46
Registriert: Sonntag 17. Mai 2009, 18:20

Ist eigentlich wxPython besser dokumentiert?
Ich bin immer noch am überlegen, für zukünftige Projekte wxPython auszuprobieren. Die Anzahl der Beiträge zu wxPython in Relation zu den PyQt-Threads spricht auch eine gewisse Sprache. Ich glaube aber, dass mit PyQt mehr Flexibilität möglich ist.
Wie seht ihr das? Wer kennt beide? Wer bevorzugt wxPython und wer PyQt?
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

Qt ist meines erachtens sehr gut dokumentiert. Vor allem ist es so durchdacht entworfen, dass die meisten fragen sich mit einem blick in die referenz beantworten lassen. Du hast die referenz einfach nicht sorgsam genug gelesen.
http://www.kinderpornos.info
lunar

Qt4 ist eigentlich so gut dokumentiert wie nur wenige andere Bibliotheken ... so schwer kann das Lesen der C++-Beispiele gar nicht sein, dass man auf diese Doku verzichten würde ;) Die PyQt4-Doku benötigt man doch eigentlich nur, um die geänderten Signaturen der PyQt4-Objekte nachzulesen.
Antworten