Leere Tabelle mit Header mit QTableview darstellen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
nieselfriem
User
Beiträge: 81
Registriert: Sonntag 13. Januar 2013, 16:00

Dienstag 31. Oktober 2017, 15:56

Hallo!

Ich habe eine Tabelle die nur dann je nach Zeilenklick in einer anderen Tabelle einen Inhalt (Bestellungen eines ausgewählten Kunden) anzeigen soll. Hat der Kunde nichts bestellt, sollen nur die Header angezeigt werden.
Dazu habe ich folgendes gemacht:
Wenn der Kunde was bestellt hatte wurde an das Model eine zweidimensionale Liste mit dem entsprechenden Inhalt übergeben.
Hat der Kunde nichts bestellt, dann wird wird eine Liste mit leeren Listen übergeben:

Code: Alles auswählen

    def fill_ku_bestell_table(self, ku_nummer):
        best_list = self.dbo.get_best_list(ku_nummer)
        if len(best_list) > 0:
            model = KundeBestellungUebersicht(best_list)
            return model
        else:
            model = KundeBestellungUebersicht([[],[],[],[],[]])
            return model

Code: Alles auswählen

class KundeBestellungUebersicht(QtCore.QAbstractTableModel):
    headers = [" Bestellnummer ", "Bestelldatum","Gesamtpreis","Status"]

    def __init__(self, data=None, parent=None):
        QtCore.QAbstractListModel.__init__(self, parent)
        self._fulldata = data
        self._data = []

        for i in range(len(data)):
            self._data.append(self._fulldata[i][1:5])

    def getDataList(self,row):
        return self._fulldata[row]

    def rowCount(self, parent):
        return len(self._data)

    def columnCount(self, parent):
        return len(self._data[0])

    def flags(self, index):
        return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable

    def data(self, index, role):
        curr_format = Currency()
        status = Statusformat()
        if role == QtCore.Qt.DisplayRole:
            row = index.row()
            column = index.column()
            value = self._data[row][column]
            if column == 1:
                try:
                    value = value.strftime("%d.%m.%Y")
                    return value
                except ValueError as e:
                    print("Value Error: ", e)

            if column == 2:
                try:
                    value = str(curr_format.get_Curr_format(value*0.01)).replace('.', ',') + " €"
                    return value
                except ValueError as e:
                    print("Value Error: ", e)
            print("column=", column)
            if column == 3:
                print("Status", value)
                try:
                    value = status.bestellstatus(value)
                except ValueError as e:
                    print("Value Error: ", e)
            return value
        if role == Qt.ToolTipRole:
            row = index.row()
            column = index.column()
            return str(self._data[row][0])

    def setData(self, index, value, role=QtCore.Qt.EditRole):
        if role == QtCore.Qt.EditRole:
            row = index.row()
            column = index.column()
            data = value
            self._data[row][column] = data
            self.dataChanged.emit(index, index)
            return True

    def setDataCheckdata(self, index, value, role=QtCore.Qt.EditRole, column=None):
        if role == QtCore.Qt.EditRole:
            row = index.row()
            data = value
            self._data[row][column] = data
            self.dataChanged.emit(index, index)
            return True

    def headerData(self, section, orientation, role):
        if role == QtCore.Qt.DisplayRole:
            if orientation == QtCore.Qt.Horizontal:
                if section < len(self.headers):
                    return self.headers[section]
                else:
                    return "not implemented"
Das dumme ist nur, dass bei der leeren Liste die Tabellenheader auch leer bleiben. Dazu unten das Modell. Wie kann ich nun bei einem "leeren" Inhalt auch die Header darstellen?

VG niesel
Antworten