ich sitze an einem Problem jetzt schon über 3 Wochen und nach langem hin- und her ohne wirkliches Ergebnis dachte ich mir, frage ich dochmal die Experten
Folgendes Problem habe ich :
Ich rufe aus einer Oracle DB Werte ab, das ganze will ich als TreeView darstellen.
Soweit sogut, funktioniert auch an sich, aber es will mir nicht gelingen, die Child - Spalten, die weniger als 5 Spalten haben anzuzeigen unter den Parent - Zeilen, die 5 Spalten haben.
Die Beispiele, die ich gefunden habe, benutzen für die Parent- und Child - Zeilen eine identische "ColumnCount", daher wird der Aufruf meist hardcoded mit in dem Fall z.B. "return 5" (wirft in dem Fall aber auch einen Fehler auf, da die letzten Child - Zeile weniger als 5 Spalten hat). "hardcode" ich 4 oder weniger funktioniert´s, aber die übergeordneten Parent - Zeilen werden dann beschnitten zu eben 4 oder weniger Spalten.
(und hier dreh ich mich im Kreis, ich bekomm´s einfach nicht hin )
Das funktioniert dann halt in meinem Fall nicht mehr für die Child - Zeile, da die ja weniger als 5 Spalten haben und es wird ein Fehler aufgeworfen :
line 197, in data
return node.data[index.column()]
IndexError: tuple index out of range
Die relevanten Code - Zeilen sehen so aus :
Code: Alles auswählen
class TreeModel(QtCore.QAbstractItemModel):
....
def index(self, row, column, parent=QtCore.QModelIndex()):
if parent.isValid():
parent_node = parent.internalPointer()
node = parent_node.children[row]
index = self.createIndex(row, column, node)
return index
else:
index = self.createIndex(row, column, self.__top)
return index
childItem = parent_node.children[row]
if childItem:
return self.createIndex(row, column, childItem)
else:
return QtCore.QModelIndex()
def data(self, index, role):
node = index.internalPointer()
data = [str(node.data)]
if role == QtCore.Qt.DisplayRole:
return node.data[index.column()] # -> das ist die besagte Zeile 197, für die dann der Fehler aufgeworfen wird.
return None
def columnCount(self, parent=QtCore.QModelIndex()):
if parent.isValid():
return parent.internalPointer().columnCount() # wird mit 5 ausgegeben, beschneidet aber trotzdem auf 4 Spalten, anscheinend wird zuerst die else - Sektion ausgewertet und damit die Header - Zeilen beschnitten %) ...
else:
return 4 # setze ich hier "return 5" ein, bekomme ich für die Parent - Zeilen dann 5 Spalten, aber eben den Fehler sobald ich mich zur letzten Child - Zeile durchklicke....
-> ganz grundsätzliche Frage, weil ich kein Beispiel gefunden habe, das unterschiedliche Spaltenzahlen für Parent- und Child - Zeilen benutzt :
Ist das überhaupt möglich, oder müssen Parent- und Child- Zeilen identische Spaltenanzahl haben ?
-> Und falls nicht, wie müsste der Code aussehen für den "else" - Abschnitt in der "ColumnCount" um die Spaltenanzahl dann variabel statt hardcoded zurückgeben zu können ?!