'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 |
|---|
