QAbstractTableModel: Frage zu headerData() Implementierung
Verfasst: Freitag 29. Januar 2016, 14:40
Hallo Leute,
Ich hoffe der Titel ist halbwegs verständlich
Ich möchte für mein TableView vertikal eine andere Benennung als horizontal haben. Also eine separate Liste für die Zeilennamen und die Spaltennamen. Dazu habe ich den Konstruktor etwas angepasst, so dass ich als header einen Dictionary mit zwei Listen übergeben kann:
die headerData() sieht so aus:
eine Initialisierung würde zum Beispiel so aussehen:
So. Für mich sieht das alles richtig und logisch aus... aber wenn ich damit ein QTableView befüllen will, bekomme ich sowohl vertikal als auch horizontal die gleiche Benennung: Es erscheint ausschließlich der Inhalt der headerVertical-Liste, also die Zahlen. Von den Buchstaben, die horizontal erscheinen sollen keine Spur.
Es ist auch egal ob ich in headerData() nun auf Vertikal:
oder auf Horizontal teste:
Wenn ich nur diese Zeile verändere, bleibt das Ergebnis trotzdem das Gleiche, was ja eigentlich nicht sein kann. Oder seh ich da irgendwas verkehrt?
Kann mir Jemand sagen wo hier mein Brett vor dem Kopf ist?
Danke schonmal,
Gondii
Ich hoffe der Titel ist halbwegs verständlich

Ich möchte für mein TableView vertikal eine andere Benennung als horizontal haben. Also eine separate Liste für die Zeilennamen und die Spaltennamen. Dazu habe ich den Konstruktor etwas angepasst, so dass ich als header einen Dictionary mit zwei Listen übergeben kann:
Code: Alles auswählen
class TableModel(QtCore.QAbstractTableModel):
def __init__(self, table=[[]], headers={}, parent=None):
QtCore.QAbstractTableModel.__init__(self, parent)
self.__table = table
self.__headersHorizontal = headers['horizontal'] # enthält Liste für horizontale Benennung
self.__headersVertical = headers['vertical'] # enthält Liste vertikale Benennung
Code: Alles auswählen
def headerData(self, section, orientation, role):
if role == QtCore.Qt.DisplayRole:
if role == QtCore.Qt.Vertical:
return self.__headersVertical[section]
else:
return self.__headersHorizontal[section]
Code: Alles auswählen
...
headerHorizontal = ['A','B','C','D','E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
headerVertical = [i for i in range(len(headerHorizontal))]
model = TableModel(data,{'vertical': headerHorizontal, 'horizontal': headerVertical})
...
Es ist auch egal ob ich in headerData() nun auf Vertikal:
Code: Alles auswählen
if role is QtCore.Qt.Vertical:
Code: Alles auswählen
if role is QtCore.Qt.Horizontal:
Kann mir Jemand sagen wo hier mein Brett vor dem Kopf ist?

Danke schonmal,
Gondii