Ich habe ein Programm bei dem mit dem Aufruf der GUI ein QTAbelwidget mit Daten aus einer Datenbank gefüllt wird. Das funktioniert so weit auch richtig gut. Nun habe ich ein Dialog geschrieben, bei dem weitere Daten in die Datenbank eingetragen werden können. Wenn der Dialog geschlossen wird und die Daten in die DB eingetragen worden sind, soll die Tabelle die Daten erneut aus der Datenbank erhalten und eben aktualisieren werden. Leider bleiben die alten Daten die vorher drin waren stehen und die Daten des neue DB-Request werden unten an die Tabelle angegangen. Hab ich also z.B. vorher 4 Zeilen in der Tabelle und füge ein Eintrag in die DB hinzu, dann habe ich nach schließen nicht 5 Einträge, sondern 9.
Ich rufe die Methode load_ku_data einmal in Konstrukor beim Programmstart auf, um die Tabelle initial zu befüllen und ich rufe die Methode auf, nach dem ich den Dialog geschlossen habe. Wenn ich den Dialog verlassen habe, gebe ich noch ein Parameter mit, um in der load_ku_data das Leeren der Tabelle auszulösen. Aber das scheint offenbar nicht zu funktionieren
Aktuell gehe ich dabei wie folgt vor.
Code: Alles auswählen
class InitApplication(QtWidgets.QMainWindow):
ku_data = []
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle("ABU-Professional")
self.ui = Ui_MainWindow()
....
self.load_ku_data() #läd die Daten aus der Datenbank und bekommt ein zweidimensionales Array und befüllt die Tabelle
def load_ku_data(self, update=False):
if update:
print("Rowcount vor löschen" + str(self.ui.kuDatenTbl.rowCount())) #44
self.ui.kuDatenTbl.clearSelection()
self.ui.kuDatenTbl.clearContents()
self.ui.kuDatenTbl.setRowCount(0)
self.ui.kuDatenTbl.clear()
print("Rowcount nach löschen" + str(self.ui.kuDatenTbl.rowCount())) #0
do = DatabaseOperations()
ku_tbl = do.get_ku_list()
if len(ku_tbl) < 1:
self.ui.no_Ku_Datas_LB.setVisible(True)
for i in range(len(ku_tbl)):
self.ku_data.append(ku_tbl[i][2:12]) #Slicing da PK und FK nicht in Tabelle benötigt werden
print(self.ku_data)
for row in range(0, len(self.ku_data)):
row_count = self.ui.kuDatenTbl.rowCount()
self.ui.kuDatenTbl.insertRow(row_count)
for col in range(0, len(self.ku_data[row])):
item = self.ku_data[row][col]
self.ui.kuDatenTbl.setItem(row, col, QtWidgets.QTableWidgetItem(item))
...
def show_neuerKunde_dialog(self):
new_customer = {}
neuer_kunde_dialog = QtWidgets.QDialog()
self.new_cust_dialog.setupUi(neuer_kunde_dialog)
cust_op = Customeroperations()
self.new_cust_dialog.abwLiefAdrrCB.stateChanged.connect(lambda:self.change_neuer_kunde_dialog(self.new_cust_dialog))
self.new_cust_dialog.buttonBox.button(QtWidgets.QDialogButtonBox.Save).clicked.connect(lambda: cust_op.speicherKunde(
name=self.new_cust_dialog.kuNameLe.text(),
vorname=self.new_cust_dialog.kuVorNameLe.text(),
strasse=self.new_cust_dialog.kuStrHNrLe.text(),
))
neuer_kunde_dialog.exec_()
self.load_ku_data(True) #Aufruf um Tabelle zu aktualiseren und vorher zu leeren
VG niesel