'QDialog overriding another QDialog when reverting to previous index?

I am having a problem where a i call the QDialog but displays the different QDialog, im using a backbutton method to revert to Menu() which is properly called but when I press a different button for a different QDialog to display the previous QDialog pops up instead of the one i called. I think its overriding the index or something idk what to do.....

class Menu(QDialog):
    def __init__(self):
        super(Menu,self).__init__()
        loadUi("gui/menu.ui",self)
        theme = open("Theme/SpyBot.qss", 'r')
        with theme:
            qss = theme.read()
            self.setStyleSheet(qss)
        self.regs.clicked.connect(self.register_data)
        self.update.clicked.connect(self.train_update)
        self.list.clicked.connect(self.list_reg)

    def register_data(self):
        reg = Register()
        widget.addWidget(reg)
        widget.setCurrentIndex(1+1)
        print(widget.currentIndex())
    def list_reg(self):
        list = List()
        widget.addWidget(list)
        widget.setCurrentIndex(widget.currentIndex() + 1)
        print(widget.currentIndex())
    def train_update(self):
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        password='smartdoor', port=22)
        try:
            train()
            key()
            # SCPCLient takes a paramiko transport as an argument
            scp = SCPClient(ssh.get_transport())
            scp.put('recognizer.pickle','/home/pi/SmartDoor/recognizer.pickle')
            scp.put('le.pickle', '/home/pi/SmartDoor/le.pickle')
            scp.put('AccessCodes.txt', '/home/pi/SmartDoor/AccessCodes.txt')
            scp.put('database', recursive=True, remote_path='/home/pi/SmartDoor')
            print("done.")

            self.update.update()

            QMessageBox.about(self, "Database Update", "New faces has been trained")

        except Exception as err:
            print(err)
        finally:
            os.chdir(r"C:\Users\USER\PycharmProjects\SmartAutomaticDoorLockSystemWithQRCODE_ADMINISTRATION")

class List(QDialog):
    def __init__(self):
        super(List, self).__init__()
        loadUi("gui/list.ui",self)
        theme = open("Theme/SpyBot.qss", 'r')
        with theme:
            qss = theme.read()
            self.setStyleSheet(qss)
        self.tablelist.setColumnWidth(0,100)
        self.tablelist.setColumnWidth(1, 150)
        self.tablelist.setColumnWidth(2, 200)
        self.tablelist.setHorizontalHeaderLabels(['ID','Name','Email'])
        self.tablelist.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        self.loadlist()
        self.remove.clicked.connect(self.delete_user)
        self.back.clicked.connect(self.backMenu)

    def loadlist(self):
        cnx = mysql.connector.connect(host="localhost", user="root", passwd="", port=3306, db="dbcodes")
        cur = cnx.cursor()
        query = "SELECT ID,Name,Email FROM test "
        cur.execute(query)
        all_list = cur.fetchall()

        try:

            for row in all_list:
                tableindex = all_list.index(row)

                self.tablelist.insertRow(tableindex)
                self.tablelist.setItem(tableindex, 0, QtWidgets.QTableWidgetItem(row[0]))
                self.tablelist.setItem(tableindex, 1, QtWidgets.QTableWidgetItem(row[1]))
                self.tablelist.setItem(tableindex, 2, QtWidgets.QTableWidgetItem(row[2]))
        except Exception as err:
            print(err)
    def delete_user(self):
        cnx = mysql.connector.connect(host="localhost", user="root", passwd="", port=3306, db="dbcodes")
        cur = cnx.cursor()
        choice = QMessageBox.question(self,"Deleting Authorization","Are you sure you want to remove access to this user? ",QMessageBox.Yes|QMessageBox.No)
        currentRow = self.tablelist.currentRow()
        currentColumn = self.tablelist.currentColumn()
        cell_value =    self.tablelist.item(currentRow, currentColumn)
        query = 'DELETE FROM test WHERE ID = %s'
        print(cell_value.text())

        dir = cell_value.text()
        parent = r'C:\Users\USER\PycharmProjects\SmartAutomaticDoorLockSystemWithQRCODE_ADMINISTRATION\database'
        path = os.path.join(parent, dir)

        if choice == QMessageBox.Yes:
            bad_words = [cell_value.text()]
            try:
                cur.execute(query,(cell_value.text(),))
                cnx.commit()
                if self.tablelist.rowCount() > 0:
                    self.tablelist.removeRow(currentRow)
                remove_key()
                shutil.rmtree(path , ignore_errors = True)
                with open('AccessCodes.txt') as oldfile, open('AccessCodes.txt', 'w') as newfile:
                    for line in oldfile:
                        if not any(bad_word in line for bad_word in bad_words):
                            newfile.write(line)
                os.chdir(r'C:\Users\USER\PycharmProjects\SmartAutomaticDoorLockSystemWithQRCODE_ADMINISTRATION')

            except Exception as err:
                print(err)
        else:
            pass

    def backMenu(self):
        widget.setCurrentIndex(1)
        back = Menu()
        widget.addWidget(back)
        widget.update()

        print(widget.currentIndex())
class Register(QDialog):
    def __init__(self):
        super(Register, self).__init__()
        loadUi("gui/reg.ui",self)
        theme = open("Theme/SpyBot.qss", 'r')
        with theme:
            qss = theme.read()
            self.setStyleSheet(qss)
        self.okbutton.clicked.connect(self.clickedregistered)
        print(widget.currentIndex())

    def clickedregistered(self):
        regemail = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
        regid = '^[0-9]*$'
        id = self.id.text()
        name = self.name.text()
        email = self.email.text()
        if len(id) == 0 or len(name) == 0 or len(email) == 0:
            self.error.setText("All fields are empty.")
            print("error")
            return
        elif bool(re.fullmatch(regemail, email)) == False:
            print("Invalid input ")
            self.error.setText("Invalid email.")
            self.email.setText("")
            return
        elif bool(re.fullmatch(regid, id)) == False:
            print("Invalid input ")
            self.error.setText("Invalid Id.")
            self.id.setText("")
            return
        else:
            cnx = mysql.connector.connect(host="localhost", user="root", passwd="", port=3306, db="dbcodes")
            cur = cnx.cursor()
            try:
                query = "INSERT INTO test (ID,Name,Email) VALUES(%s,%s,%s);"
                values = (id, name, email)
                cur.execute(query, values)
                self.okbutton.setEnabled(False)
                cnx.commit()
                scan = Scanner()
                widget.addWidget(scan)
                widget.setCurrentIndex(widget.currentIndex() + 1)
                print(widget.currentIndex()) 
                QMessageBox.about(self, "REGISTERED",
                                  "A user has been registered by an Administrator.")
            except Exception as err:
                print(err)
                cnx.rollback()
            cnx.close()
            cur.close()
            print("okay")

the bug displays after i press a button on class Menu() instead of showing the Register() the only things pops up is the List() and by means List() is showing on 2 diffrent buttons after pressing the backButton() any help?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source