Home > Software engineering >  refresh QTableView after new entry
refresh QTableView after new entry

Time:01-15

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?

CodePudding user response:

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

  • Related