QAbstractItemModel mit variablem "ColumnCount"
Verfasst: Donnerstag 30. Juli 2020, 16:22
				
				Hallo zusammen, 
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 :
-> 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 ?!
			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 ?!







