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"
VG niesel