Spalte aus TableModel auslesen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
...
User
Beiträge: 116
Registriert: Mittwoch 23. Dezember 2009, 20:22

Hallo,

Ich habe ein QSqlQueryModel, welches ich in einem TableView darstelle - soweit so gut.

Jetzt möchte ich die Daten aber auch in anderer Form darstellen, und möchte dafür aus dem Model die Daten einer Spalte auslesen - nur wie?

Ich habe diesen Thread gefunden: http://www.python-forum.de/topic-19911. ... ight=model in welchem klaus66 eine Lösung gefunden hat, um eine Zeile z von Spalte 0 - s auszulesen.
Kann ich so eigentlich einfach verwenden, und s und z umdrehen, so das eine Spalte von Zeile 0 - z ausgelesen wird, aber... ich verstehe das nicht!

Hier nocheinmal kurz der Code von Klaus66:

Code: Alles auswählen

    def getData(self, model, z, s):     # z = Zeile s = Spalte
        self.zeile = ""
        for i in range(s):
            index = model.index(z, i, QtCore.QModelIndex())
            self.zeile += u"%s " % QtCore.QVariant(model.data(index)).toString() 
Ich würde also anstelle von self.zeile = "" self.spalte = [] verwenden,
und statt self.zeile += ... self.spalte.append(QtCore.QVariant...) verwenden.

Aber - ich verstehe noch nicht, was Klaus da genau gemacht hat.
model.index(self, int, int, QModelIndex parent = QModelIndex())
steht in der Doku. - Feine Sache!
Klaus verwendet als QModelIndex wie es mir scheint, eine neue Instanz von QModelIndex - aber warum? Was könnte man sonst machen? Was macht es denn genau mit dem QModelIndex im Aufruf, um einen QModelIndex zu erstellen?

Gibt es vieleicht eine schönere Lösung? QVariant kann ja auch eine Liste beinhalten. Warum gibt es nicht QtCore.QVariant(self.model.row(int)).toList()
bzw QtCore.QVariant(self.model.col(int)).toList()
sonst kann man ja auch immer ganze columns adressieren (removeColumn usw, da muss man ja auch nicht die Zellen einzeln removen)

Ich möchte das ein Matplotwidget am ende die Daten bekommt, und das benötigt sie Spaltenweise in Listen.
Ich hab mir überlegt, ob ich das irgendwie über QAbstractItemView zu nem View zusammenbasteln kann, aber dafür bin ich einfach noch nicht weit genug - wie ihr sicher seht...

Wenn mir da jemand helfen könnte - und seien es Tipps zu weiteren Classen die ich mir durchlesen sollte...
(Bisher:
QSqlQueryModel, QTableModel, QAbstractTableModel, QVariant, QTableView, QAbstractItemView)

Ansonsten mach ich es halt so ungefähr:

Code: Alles auswählen

rows = self.model.rowCount()
columns = self.model.columnCount()
columnvalues = []
for column in columns:
    columnvalues.append([])
    for row in rows:
        columnvalues[0].append(self.model.data(model.index(row, column)).toFloat()[0]
wie es in etwa in der QSqlQueryModel class Reference geschrieben steht...
Aber ich kann es immer noch nicht fassen, das ich nicht gleich ganze Spalten verarbeiten kann...


lg,
...[/code]
...
User
Beiträge: 116
Registriert: Mittwoch 23. Dezember 2009, 20:22

Joar... Fragt mich nicht, was ich sagen wollte... einiges...
Der Code Funktioniert, wenn ich die Fehler berichtige (range(row) und range(col) in den for-anweisungen usw...)

Aber die direkt auszulesen... geht das sicher nicht?
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Wo willst du das denn zusätzlich anzeigen ?

Wenn ich das richtig verstanden habe gib man jedem View das selbe Model mit und zeigt bzw verbirgt dass was ich sehen oder nicht sehen will in dem View-Widget

Funktionen zum verstecken von Zeilen und Spalten gibts.

Ansonsten wäre es meines Wissens angebrachter du holst dir die Daten wieder daher von wo du sie auch dem Model gibst. In deinem Fall vermute ich eine Datenbank da Du ja nen QSqlTableModel nutzt.

Hoffe mein Aussage stimmt so.

Gruß


edit:
Wer lesen tut ist klar im Vorteil.
Ich möchte das ein Matplotwidget am ende die Daten bekommt
Sorry da stehts ja :-)

Ich denke dann wäre der richtige Weg die Daten dahe zu holen wo sie her kommen, also aus der DB.
Oder werden die Daten im Matplot auch manipuliert und kann das Matplot (hatte damit noch keine Bekanntschaft) ein Model aufnehemen ?
...
User
Beiträge: 116
Registriert: Mittwoch 23. Dezember 2009, 20:22

Ich habe die Daten ja bereits für die Darstellung in einer Tabelle aus der Datenbank geholt - mittels QSqlQueryModel (Stellt nur ausgewählte Spalten & Zeilen aus der Datenbank dar, read-only, zum vergleich zum QSqlTableModel welches ja alle Spalten sowohl zum lesen als auch zum schreiben zur verfügung stellt)
Während das Programm läuft soll der Query immer mal wieder verändert werden, und damit die angezeigten Daten andere werden.

Ich denke es wäre falsch sie EXTRA für das Matplotwidget nochmal aus der Datanbank holen.
Das wäre ja ein rechtes geraffel mit unterschiedlichen Datenbankverbindungen und cursors - und am Ende gibts n Fehler, und sie stören sich beim Lesen...

lg,
...
Antworten