Spalte aus TableModel auslesen
Verfasst: Dienstag 16. März 2010, 13:57
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:
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: 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]
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:
Ich würde also anstelle von self.zeile = "" self.spalte = [] verwenden,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()
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]
Aber ich kann es immer noch nicht fassen, das ich nicht gleich ganze Spalten verarbeiten kann...
lg,
...[/code]