Leere Tabelle mit Header mit QTableview darstellen

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

Leere Tabelle mit Header mit QTableview darstellen

Beitragvon nieselfriem » 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:

  1.     def fill_ku_bestell_table(self, ku_nummer):
  2.         best_list = self.dbo.get_best_list(ku_nummer)
  3.         if len(best_list) > 0:
  4.             model = KundeBestellungUebersicht(best_list)
  5.             return model
  6.         else:
  7.             model = KundeBestellungUebersicht([[],[],[],[],[]])
  8.             return model


  1. class KundeBestellungUebersicht(QtCore.QAbstractTableModel):
  2.     headers = [" Bestellnummer ", "Bestelldatum","Gesamtpreis","Status"]
  3.  
  4.     def __init__(self, data=None, parent=None):
  5.         QtCore.QAbstractListModel.__init__(self, parent)
  6.         self._fulldata = data
  7.         self._data = []
  8.  
  9.         for i in range(len(data)):
  10.             self._data.append(self._fulldata[i][1:5])
  11.  
  12.     def getDataList(self,row):
  13.         return self._fulldata[row]
  14.  
  15.     def rowCount(self, parent):
  16.         return len(self._data)
  17.  
  18.     def columnCount(self, parent):
  19.         return len(self._data[0])
  20.  
  21.     def flags(self, index):
  22.         return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
  23.  
  24.     def data(self, index, role):
  25.         curr_format = Currency()
  26.         status = Statusformat()
  27.         if role == QtCore.Qt.DisplayRole:
  28.             row = index.row()
  29.             column = index.column()
  30.             value = self._data[row][column]
  31.             if column == 1:
  32.                 try:
  33.                     value = value.strftime("%d.%m.%Y")
  34.                     return value
  35.                 except ValueError as e:
  36.                     print("Value Error: ", e)
  37.  
  38.             if column == 2:
  39.                 try:
  40.                     value = str(curr_format.get_Curr_format(value*0.01)).replace('.', ',') + " €"
  41.                     return value
  42.                 except ValueError as e:
  43.                     print("Value Error: ", e)
  44.             print("column=", column)
  45.             if column == 3:
  46.                 print("Status", value)
  47.                 try:
  48.                     value = status.bestellstatus(value)
  49.                 except ValueError as e:
  50.                     print("Value Error: ", e)
  51.             return value
  52.         if role == Qt.ToolTipRole:
  53.             row = index.row()
  54.             column = index.column()
  55.             return str(self._data[row][0])
  56.  
  57.     def setData(self, index, value, role=QtCore.Qt.EditRole):
  58.         if role == QtCore.Qt.EditRole:
  59.             row = index.row()
  60.             column = index.column()
  61.             data = value
  62.             self._data[row][column] = data
  63.             self.dataChanged.emit(index, index)
  64.             return True
  65.  
  66.     def setDataCheckdata(self, index, value, role=QtCore.Qt.EditRole, column=None):
  67.         if role == QtCore.Qt.EditRole:
  68.             row = index.row()
  69.             data = value
  70.             self._data[row][column] = data
  71.             self.dataChanged.emit(index, index)
  72.             return True
  73.  
  74.     def headerData(self, section, orientation, role):
  75.         if role == QtCore.Qt.DisplayRole:
  76.             if orientation == QtCore.Qt.Horizontal:
  77.                 if section < len(self.headers):
  78.                     return self.headers[section]
  79.                 else:
  80.                     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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder