0

I've created a program that allows you to login and sign up. When you have the right credentials it opens a window but it doesn't close. The same thing happens when you press the button to sign up. I've tried to use the close method but it doesn't work i always get:

AttributeError: type object 'Ui_Dialog' has no attribute 'close'

here is the full code of all the windows: Login Page

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QMessageBox

import sqlite3
from welcome import Ui_MainWindow
from signup_page import Ui_Dialog2
import sys

#widget.setCurrentIndex(widget.currentIndex)
class Ui_Dialog(object):       
    def showMessageBox(self):
        font = QtGui.QFont()
        font.setPointSize(20)
        self.label.setFont(font)
        self.label.setStyleSheet("color: rgb(0, 0, 0);\n"
"background-color: rgb(255, 0, 0);")
        self.label.setObjectName("label")
        self.label.setText("WRONG USERNAME/PASSWORD")    
        
        
       
            
    def loginCheck(self):
             
        username = self.username_input.text()
        password = self.password_input.text()

        connection = sqlite3.connect("login.db")
        result = connection.execute("SELECT * FROM USERS WHERE USERNAME = ? AND PASSWORD = ?", (username, password))
        if (len(result.fetchall())) > 0:
            self.welcomewindow = QtWidgets.QMainWindow()
            self.ui = Ui_MainWindow()
            self.ui.setupUi(self.welcomewindow)
            self.welcomewindow.show()
            
            
        else:
            self.showMessageBox()

    def singup(self):
        self.signup_page = QtWidgets.QDialog()
        self.ui = Ui_Dialog2()
        self.ui.setupUi(self.signup_page)
        self.signup_page.show()
        
        
        
    def setupUi(self, Dialog):        
        Dialog.setObjectName("Dialog")
        Dialog.resize(591, 457)
        self.user_name_label = QtWidgets.QLabel(Dialog)
        self.user_name_label.setGeometry(QtCore.QRect(190, 150, 81, 16))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.user_name_label.sizePolicy().hasHeightForWidth())
        self.user_name_label.setSizePolicy(sizePolicy)
        self.user_name_label.setSizeIncrement(QtCore.QSize(0, 0))
        self.user_name_label.setBaseSize(QtCore.QSize(0, 0))
        font = QtGui.QFont()
        font.setPointSize(13)
        self.user_name_label.setFont(font)
        self.user_name_label.setObjectName("user_name_label")
        self.password_label = QtWidgets.QLabel(Dialog)
        self.password_label.setGeometry(QtCore.QRect(190, 210, 81, 16))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.password_label.sizePolicy().hasHeightForWidth())
        self.password_label.setSizePolicy(sizePolicy)
        self.password_label.setSizeIncrement(QtCore.QSize(0, 0))
        self.password_label.setBaseSize(QtCore.QSize(0, 0))
        font = QtGui.QFont()
        font.setPointSize(13)
        self.password_label.setFont(font)
        self.password_label.setObjectName("password_label")
        self.username_input = QtWidgets.QLineEdit(Dialog)
        self.username_input.setGeometry(QtCore.QRect(280, 150, 141, 20))
        self.username_input.setObjectName("username_input")
        self.password_input = QtWidgets.QLineEdit(Dialog)
        self.password_input.setGeometry(QtCore.QRect(280, 210, 141, 20))
        self.password_input.setObjectName("password_input")
        self.password_input.setEchoMode(self.password_input.Password)
        self.login_btn = QtWidgets.QPushButton(Dialog)
        self.login_btn.setGeometry(QtCore.QRect(200, 260, 81, 31))
        font = QtGui.QFont()
        font.setPointSize(13)
        self.login_btn.setFont(font)
        self.login_btn.setObjectName("login_btn")
        #########Button Event##########
        self.login_btn.clicked.connect(self.loginCheck)
        
        ###############################
        self.signup_btn = QtWidgets.QPushButton(Dialog)
        self.signup_btn.setGeometry(QtCore.QRect(300, 260, 81, 31))
        ########Button Event##########
        self.signup_btn.clicked.connect(self.singup)
        ##############################
        font = QtGui.QFont()
        font.setPointSize(13)
        self.signup_btn.setFont(font)
        self.signup_btn.setObjectName("signup_btn")
        self.login_title = QtWidgets.QLabel(Dialog)
        self.login_title.setGeometry(QtCore.QRect(240, 40, 91, 71))
        font = QtGui.QFont()
        font.setPointSize(20)
        self.login_title.setFont(font)
        self.login_title.setObjectName("login_title")
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(130, 370, 391, 31))
        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)
    


    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Login Page"))
        self.user_name_label.setText(_translate("Dialog", "Username"))
        self.password_label.setText(_translate("Dialog", "Password"))
        self.login_btn.setText(_translate("Dialog", "Login"))
        self.signup_btn.setText(_translate("Dialog", "Sign Up"))
        self.login_title.setText(_translate("Dialog", "  Login"))
if __name__ == "__main__":
    import sys
    
    
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QStackedWidget()
     
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_Dialog()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

The main window:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(593, 458)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(200, 180, 221, 71))
        font = QtGui.QFont()
        font.setPointSize(40)
        self.label.setFont(font)
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Welcome"))
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

and the signup page:

from PyQt5 import QtCore, QtGui, QtWidgets
import sqlite3
from welcome import Ui_MainWindow
import re
from PyQt5.QtWidgets import QMessageBox

class Ui_Dialog2(object):
    
          
    def showMessageBox_password(self):
            
        font = QtGui.QFont()
        font.setPointSize(20)
        self.label.setFont(font)
        self.label.setStyleSheet("color: rgb(0, 0, 0);\n"
"background-color: rgb(255, 0, 0);")
        self.label.setObjectName("label")
        self.label.setText("INVALID PASSWORD")
    def showMessageBox_email(self):
            
        
        font = QtGui.QFont()
        font.setPointSize(20)
        self.label.setFont(font)
        self.label.setStyleSheet("color: rgb(0, 0, 0);\n"
"background-color: rgb(255, 0, 0);")
        self.label.setObjectName("label")
        self.label.setText("     INVALID EMAIL")


    def insertData(self):
        username = self.username_entry.text()
        password = self.password_entry.text()
        email = self.email_entry.text()
        connection = sqlite3.connect("login.db")
        regex = '^(\w|\.|\_|\-)+[@](\w|\_|\-|\.)+[.]\w{2,3}$'
        valid_email = True
        valid_password = True
        
        if(re.search(regex, email)):
            valid_email = True
        
        else:
            valid_email = False
            
        if len(password) > 7:
            valid_password = True
        else:
            valid_password = False
        

        if valid_email == True and valid_password == True:
            connection.execute("INSERT INTO USERS VALUES(?,?,?)", (username, email, password))
            
            connection.commit()
            
            self.welcomewindow = QtWidgets.QMainWindow()
            self.ui = Ui_MainWindow()
            self.ui.setupUi(self.welcomewindow)
            self.welcomewindow.show()                
        if valid_email == False:
            self.showMessageBox_email()
        elif valid_password == False:
            self.showMessageBox_password()
        


        
        connection.close()
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(593, 458)
        self.user_name_label = QtWidgets.QLabel(Dialog)
        self.user_name_label.setGeometry(QtCore.QRect(190, 200, 81, 16))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.user_name_label.sizePolicy().hasHeightForWidth())
        self.user_name_label.setSizePolicy(sizePolicy)
        self.user_name_label.setSizeIncrement(QtCore.QSize(0, 0))
        self.user_name_label.setBaseSize(QtCore.QSize(0, 0))
        font = QtGui.QFont()
        font.setPointSize(13)
        self.user_name_label.setFont(font)
        self.user_name_label.setObjectName("user_name_label")
        self.password_label = QtWidgets.QLabel(Dialog)
        self.password_label.setGeometry(QtCore.QRect(190, 240, 81, 16))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.password_label.sizePolicy().hasHeightForWidth())
        self.password_label.setSizePolicy(sizePolicy)
        self.password_label.setSizeIncrement(QtCore.QSize(0, 0))
        self.password_label.setBaseSize(QtCore.QSize(0, 0))
        font = QtGui.QFont()
        font.setPointSize(13)
        self.password_label.setFont(font)
        self.password_label.setObjectName("password_label")
        self.email_label = QtWidgets.QLabel(Dialog)
        self.email_label.setGeometry(QtCore.QRect(190, 160, 81, 16))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.email_label.sizePolicy().hasHeightForWidth())
        self.email_label.setSizePolicy(sizePolicy)
        self.email_label.setSizeIncrement(QtCore.QSize(0, 0))
        self.email_label.setBaseSize(QtCore.QSize(0, 0))
        font = QtGui.QFont()
        font.setPointSize(13)
        self.email_label.setFont(font)
        self.email_label.setObjectName("email_label")
        self.email_entry = QtWidgets.QLineEdit(Dialog)
        self.email_entry.setGeometry(QtCore.QRect(270, 160, 200, 20))
        self.email_entry.setObjectName("email_entry")
        self.username_entry = QtWidgets.QLineEdit(Dialog)
        self.username_entry.setGeometry(QtCore.QRect(270, 200, 200, 20))
        self.username_entry.setObjectName("username_entry")
        self.password_entry = QtWidgets.QLineEdit(Dialog)
        self.password_entry.setGeometry(QtCore.QRect(270, 240, 200, 20))
        self.password_entry.setObjectName("password_entry")
        self.password_entry.setEchoMode(self.password_entry.Password)
        self.sign_up_button = QtWidgets.QPushButton(Dialog)
        self.sign_up_button.setGeometry(QtCore.QRect(270, 280, 81, 31))
        font = QtGui.QFont()
        font.setPointSize(13)
        self.sign_up_button.setFont(font)
        self.sign_up_button.setObjectName("sign_up_button")
        self.sign_up_button.clicked.connect(self.insertData)
        self.login_title = QtWidgets.QLabel(Dialog)
        self.login_title.setGeometry(QtCore.QRect(220, 50, 191, 71))
        font = QtGui.QFont()
        font.setPointSize(20)
        self.login_title.setFont(font)
        self.login_title.setObjectName("login_title")
        
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(170, 360, 251, 31))
        
        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Sign Up Page"))
        self.user_name_label.setText(_translate("Dialog", "Username"))
        self.password_label.setText(_translate("Dialog", "Password"))
        self.email_label.setText(_translate("Dialog", "Email"))
        self.sign_up_button.setText(_translate("Dialog", "Sign Up"))
        self.login_title.setText(_translate("Dialog", "Create Account"))
        
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_Dialog2()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
  • Try `Ui_Dialog.done()` The question you asked already exists. Take a look at this: https://stackoverflow.com/questions/31146799/how-to-close-a-qdialog – Timm Nicolaizik Apr 03 '21 at 13:44
  • @TimmNicolaizik Ui_Dialog.done() won't work since it is not a subclass of QDialog. – Heike Apr 03 '21 at 13:58

0 Answers0