Search code examples
pythonsqliteuser-interfacepyqtpyside6

refresh QTableView after new entry


I created a QtableView in a MainWindow. it shows a Table via Model

class MitarbeiterWindow(QMainWindow, Ui_MitarbeiterWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        #Menüleisten funktionen
        self.actionLogout.triggered.connect(self.Logout)
        self.actionClose.triggered.connect(self.beendenfunktion)
        self.actionMitarbeiter.triggered.connect(self.mitarbeiteroeffnen)
        self.actionAirline.triggered.connect(self.airlinesoeffnen)
        self.actionAbteilungen.triggered.connect(self.abteilungenoeffnen)
        self.actionInfo.triggered.connect(self.hilfeanzeigen)
        #Buttonfunktionen
        self.btn_add.clicked.connect(self.mitarbeiterhinzufuegen)
        db.open()
        self.db_abfrage()

    def db_abfrage(self):
        self.mod_mitarbeiter = QtSql.QSqlRelationalTableModel()
        self.mod_mitarbeiter.setTable("mitarbeiter")
        self.mod_mitarbeiter.setRelation(2,QtSql.QSqlRelation("abteilungen","Abteilungsid", "Abteilung"))
        self.tbl_mitarbeiter.setItemDelegate(QtSql.QSqlRelationalDelegate())
        self.mod_mitarbeiter.select()
        self.tbl_mitarbeiter.setModel(self.mod_mitarbeiter)
        
    
    def Logout(self):
        print("-----Es wird ausgeloggt-----")
        mitarbeiterwindow.close()
        mainwindow.close()
        loginwindow.show()



    def mitarbeiterhinzufuegen(self):
        print("-----/////Mitarbeiter hinzufügen-----")
        mitarbeiteraddwindow.show()
        mitarbeiterwindow.close()

when i add a new entry to the sql db it shows it self only after reopening the whole app.

is there a way to update the model oder refresh it aber reopening the window?

is there a way to refresh the Table with new entries after saving the new entries?


Solution

  • i made a short solution with an added button [Refresh] and following code

    class MitarbeiterWindow(QMainWindow, Ui_MitarbeiterWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
    
        #Menüleisten funktionen
        self.actionLogout.triggered.connect(self.Logout)
        self.actionClose.triggered.connect(self.beendenfunktion)
        self.actionMitarbeiter.triggered.connect(self.mitarbeiteroeffnen)
        self.actionAirline.triggered.connect(self.airlinesoeffnen)
        self.actionAbteilungen.triggered.connect(self.abteilungenoeffnen)
        self.actionInfo.triggered.connect(self.hilfeanzeigen)
        #Buttonfunktionen
        self.btn_add.clicked.connect(self.mitarbeiterhinzufuegen)
        self.db_abfrage()
        self.btn_delete.clicked.connect(self.db_refresh)
    
    def db_abfrage(self):
        self.mod_mitarbeiter = QtSql.QSqlRelationalTableModel()
        self.mod_mitarbeiter.setTable("mitarbeiter")
        self.mod_mitarbeiter.setRelation(2,QtSql.QSqlRelation("abteilungen","Abteilungsid", "Abteilung"))
        self.tbl_mitarbeiter.setItemDelegate(QtSql.QSqlRelationalDelegate())
        self.db_refresh()
        
    def db_refresh(self):
        model = self.mod_mitarbeiter
        abfrage = """UPDATE mitarbeiter """
        query.exec(abfrage)
        model.select()
        self.tbl_mitarbeiter.setModel(model)
    

    now i have to figuere out how to make it automatical without a button