1

i have two .ui files that converted to python using pyuic5. first converted ui file is (LoginWindowUI.py) as below:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_LoginWindow(object):
    def setupUi(self, LoginWindow):
        LoginWindow.setObjectName("LoginWindow")
        LoginWindow.setWindowModality(QtCore.Qt.NonModal)
        LoginWindow.setEnabled(True)
        LoginWindow.resize(446, 182)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(LoginWindow.sizePolicy().hasHeightForWidth())
        LoginWindow.setSizePolicy(sizePolicy)
        LoginWindow.setMouseTracking(False)
        LoginWindow.setLayoutDirection(QtCore.Qt.RightToLeft)
        LoginWindow.setLocale(QtCore.QLocale(QtCore.QLocale.Persian, QtCore.QLocale.Iran))
        LoginWindow.setDocumentMode(False)
        self.centralwidget = QtWidgets.QWidget(LoginWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget.setGeometry(QtCore.QRect(194, 30, 187, 77))
        self.layoutWidget.setObjectName("layoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.password_ldt = QtWidgets.QLineEdit(self.layoutWidget)
        self.password_ldt.setLocale(QtCore.QLocale(QtCore.QLocale.Persian, QtCore.QLocale.Iran))
        self.password_ldt.setText("")
        self.password_ldt.setEchoMode(QtWidgets.QLineEdit.Password)
        self.password_ldt.setCursorPosition(0)
        self.password_ldt.setAlignment(QtCore.Qt.AlignCenter)
        self.password_ldt.setObjectName("password_ldt")
        self.gridLayout.addWidget(self.password_ldt, 1, 1, 1, 1)
        self.password_lbl = QtWidgets.QLabel(self.layoutWidget)
        self.password_lbl.setAlignment(QtCore.Qt.AlignCenter)
        self.password_lbl.setObjectName("password_lbl")
        self.gridLayout.addWidget(self.password_lbl, 1, 0, 1, 1)
        self.username_lbl = QtWidgets.QLabel(self.layoutWidget)
        self.username_lbl.setAlignment(QtCore.Qt.AlignCenter)
        self.username_lbl.setObjectName("username_lbl")
        self.gridLayout.addWidget(self.username_lbl, 0, 0, 1, 1)
        self.username_ldt = QtWidgets.QLineEdit(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.username_ldt.sizePolicy().hasHeightForWidth())
        self.username_ldt.setSizePolicy(sizePolicy)
        self.username_ldt.setLocale(QtCore.QLocale(QtCore.QLocale.Persian, QtCore.QLocale.Iran))
        self.username_ldt.setText("")
        self.username_ldt.setEchoMode(QtWidgets.QLineEdit.Normal)
        self.username_ldt.setAlignment(QtCore.Qt.AlignCenter)
        self.username_ldt.setObjectName("username_ldt")
        self.gridLayout.addWidget(self.username_ldt, 0, 1, 1, 1)
        self.login_btn = QtWidgets.QPushButton(self.layoutWidget)
        self.login_btn.setCursor(QtGui.QCursor(QtCore.Qt.ClosedHandCursor))
        self.login_btn.setAutoDefault(False)
        self.login_btn.setDefault(False)
        self.login_btn.setObjectName("login_btn")
        self.gridLayout.addWidget(self.login_btn, 2, 1, 1, 1)
        self.description_lbl = QtWidgets.QLabel(self.centralwidget)
        self.description_lbl.setGeometry(QtCore.QRect(30, 40, 141, 41))
        self.description_lbl.setText("")
        self.description_lbl.setAlignment(QtCore.Qt.AlignCenter)
        self.description_lbl.setWordWrap(True)
        self.description_lbl.setObjectName("description_lbl")
        LoginWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(LoginWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 446, 21))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        LoginWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(LoginWindow)
        self.statusbar.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
        self.statusbar.setObjectName("statusbar")
        LoginWindow.setStatusBar(self.statusbar)
        self.action_cra = QtWidgets.QAction(LoginWindow)
        self.action_cra.setObjectName("action_cra")
        self.action_db = QtWidgets.QAction(LoginWindow)
        self.action_db.setObjectName("action_db")
        self.action_exit = QtWidgets.QAction(LoginWindow)
        self.action_exit.setObjectName("action_exit")
        self.menu.addAction(self.action_cra)
        self.menu.addAction(self.action_db)
        self.menu.addSeparator()
        self.menu.addAction(self.action_exit)
        self.menubar.addAction(self.menu.menuAction())

        self.retranslateUi(LoginWindow)
        self.action_exit.triggered.connect(LoginWindow.close)
        QtCore.QMetaObject.connectSlotsByName(LoginWindow)
        LoginWindow.setTabOrder(self.username_ldt, self.password_ldt)
        LoginWindow.setTabOrder(self.password_ldt, self.login_btn)

    def retranslateUi(self, LoginWindow):
        _translate = QtCore.QCoreApplication.translate
        self.password_ldt.setToolTip(_translate("LoginWindow", "رمز عبور خود را وارد کنید."))
        self.password_lbl.setText(_translate("LoginWindow", " رمز عبور "))
        self.username_lbl.setText(_translate("LoginWindow", "نام کاربری"))
        self.username_ldt.setToolTip(_translate("LoginWindow", "لطفاً نام کاربری خود را وارد نمایید."))
        self.login_btn.setText(_translate("LoginWindow", "ورود"))
        self.menu.setTitle(_translate("LoginWindow", "درباره ما"))
        self.action_cra.setText(_translate("LoginWindow", "A"))
        self.action_db.setText(_translate("LoginWindow", "B"))
        self.action_exit.setText(_translate("LoginWindow", "خروج"))
        self.action_exit.setStatusTip(_translate("LoginWindow", "خروج"))
        self.action_exit.setShortcut(_translate("LoginWindow", "Ctrl+Q"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    LoginWindow = QtWidgets.QMainWindow()
    ui = Ui_LoginWindow()
    ui.setupUi(LoginWindow)
    LoginWindow.show()
    sys.exit(app.exec_())

and the second converted .ui file is (MainWindowUI.py) as below:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(452, 432)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.cralogo_lbl = QtWidgets.QLabel(self.centralwidget)
        self.cralogo_lbl.setGeometry(QtCore.QRect(90, 30, 171, 161))
        self.cralogo_lbl.setText("")
        self.cralogo_lbl.setPixmap(QtGui.QPixmap("../../.designer/backup/ICONS/CraLogo.png"))
        self.cralogo_lbl.setScaledContents(True)
        self.cralogo_lbl.setObjectName("cralogo_lbl")
        self.exit_btn = QtWidgets.QPushButton(self.centralwidget)
        self.exit_btn.setGeometry(QtCore.QRect(140, 340, 125, 40))
        self.exit_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.exit_btn.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.exit_btn.setCheckable(False)
        self.exit_btn.setChecked(False)
        self.exit_btn.setObjectName("exit_btn")
        self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget.setGeometry(QtCore.QRect(20, 10, 389, 152))
        self.layoutWidget.setObjectName("layoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.mobile_btn = QtWidgets.QPushButton(self.layoutWidget)
        self.mobile_btn.setEnabled(False)
        self.mobile_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.mobile_btn.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.mobile_btn.setCheckable(False)
        self.mobile_btn.setChecked(False)
        self.mobile_btn.setObjectName("mobile_btn")
        self.gridLayout.addWidget(self.mobile_btn, 1, 0, 1, 1)
        self.dataentry_btn = QtWidgets.QPushButton(self.layoutWidget)
        self.dataentry_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.dataentry_btn.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.dataentry_btn.setCheckable(False)
        self.dataentry_btn.setChecked(False)
        self.dataentry_btn.setObjectName("dataentry_btn")
        self.gridLayout.addWidget(self.dataentry_btn, 0, 2, 1, 1)
        self.village_btn = QtWidgets.QPushButton(self.layoutWidget)
        self.village_btn.setEnabled(False)
        self.village_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.village_btn.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.village_btn.setCheckable(False)
        self.village_btn.setChecked(False)
        self.village_btn.setObjectName("village_btn")
        self.gridLayout.addWidget(self.village_btn, 1, 1, 1, 1)
        self.fix_btn = QtWidgets.QPushButton(self.layoutWidget)
        self.fix_btn.setEnabled(False)
        self.fix_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.fix_btn.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.fix_btn.setCheckable(False)
        self.fix_btn.setChecked(False)
        self.fix_btn.setObjectName("fix_btn")
        self.gridLayout.addWidget(self.fix_btn, 0, 0, 1, 1)
        self.post_btn = QtWidgets.QPushButton(self.layoutWidget)
        self.post_btn.setEnabled(False)
        self.post_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.post_btn.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.post_btn.setCheckable(False)
        self.post_btn.setChecked(False)
        self.post_btn.setObjectName("post_btn")
        self.gridLayout.addWidget(self.post_btn, 2, 0, 1, 1)
        self.city_btn = QtWidgets.QPushButton(self.layoutWidget)
        self.city_btn.setEnabled(False)
        self.city_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.city_btn.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.city_btn.setCheckable(False)
        self.city_btn.setChecked(False)
        self.city_btn.setObjectName("city_btn")
        self.gridLayout.addWidget(self.city_btn, 0, 1, 1, 1)
        self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget1.setGeometry(QtCore.QRect(20, 190, 389, 134))
        self.layoutWidget1.setObjectName("layoutWidget1")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.layoutWidget1)
        self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.rep4_btn = QtWidgets.QPushButton(self.layoutWidget1)
        self.rep4_btn.setEnabled(False)
        self.rep4_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.rep4_btn.setMaximumSize(QtCore.QSize(125, 40))
        self.rep4_btn.setCheckable(False)
        self.rep4_btn.setObjectName("rep4_btn")
        self.gridLayout_2.addWidget(self.rep4_btn, 0, 0, 1, 1)
        self.rep1_btn = QtWidgets.QPushButton(self.layoutWidget1)
        self.rep1_btn.setEnabled(False)
        self.rep1_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.rep1_btn.setMaximumSize(QtCore.QSize(125, 40))
        self.rep1_btn.setCheckable(False)
        self.rep1_btn.setObjectName("rep1_btn")
        self.gridLayout_2.addWidget(self.rep1_btn, 0, 1, 1, 1)
        self.report_btn = QtWidgets.QPushButton(self.layoutWidget1)
        self.report_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.report_btn.setMaximumSize(QtCore.QSize(125, 40))
        self.report_btn.setCheckable(False)
        self.report_btn.setObjectName("report_btn")
        self.gridLayout_2.addWidget(self.report_btn, 0, 2, 1, 1)
        self.rep5_btn = QtWidgets.QPushButton(self.layoutWidget1)
        self.rep5_btn.setEnabled(False)
        self.rep5_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.rep5_btn.setMaximumSize(QtCore.QSize(125, 40))
        self.rep5_btn.setCheckable(False)
        self.rep5_btn.setObjectName("rep5_btn")
        self.gridLayout_2.addWidget(self.rep5_btn, 1, 0, 1, 1)
        self.rep2_btn = QtWidgets.QPushButton(self.layoutWidget1)
        self.rep2_btn.setEnabled(False)
        self.rep2_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.rep2_btn.setMaximumSize(QtCore.QSize(125, 40))
        self.rep2_btn.setCheckable(False)
        self.rep2_btn.setObjectName("rep2_btn")
        self.gridLayout_2.addWidget(self.rep2_btn, 1, 1, 1, 1)
        self.rep6_btn = QtWidgets.QPushButton(self.layoutWidget1)
        self.rep6_btn.setEnabled(False)
        self.rep6_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.rep6_btn.setMaximumSize(QtCore.QSize(125, 40))
        self.rep6_btn.setCheckable(False)
        self.rep6_btn.setObjectName("rep6_btn")
        self.gridLayout_2.addWidget(self.rep6_btn, 2, 0, 1, 1)
        self.rep3_btn = QtWidgets.QPushButton(self.layoutWidget1)
        self.rep3_btn.setEnabled(False)
        self.rep3_btn.setMinimumSize(QtCore.QSize(125, 40))
        self.rep3_btn.setMaximumSize(QtCore.QSize(125, 40))
        self.rep3_btn.setCheckable(False)
        self.rep3_btn.setObjectName("rep3_btn")
        self.gridLayout_2.addWidget(self.rep3_btn, 2, 1, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 452, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.exit_btn.clicked.connect(MainWindow.close)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.cralogo_lbl.setStatusTip(_translate("MainWindow", "www.cra.ir"))
        self.exit_btn.setText(_translate("MainWindow", "خروج"))
        self.mobile_btn.setText(_translate("MainWindow", "4"))
        self.dataentry_btn.setText(_translate("MainWindow", "A"))
        self.village_btn.setText(_translate("MainWindow", "2"))
        self.fix_btn.setText(_translate("MainWindow", "3"))
        self.post_btn.setText(_translate("MainWindow", "5"))
        self.city_btn.setText(_translate("MainWindow", "1"))
        self.rep4_btn.setText(_translate("MainWindow", "4"))
        self.rep1_btn.setText(_translate("MainWindow", "1"))
        self.report_btn.setText(_translate("MainWindow", "B"))
        self.rep5_btn.setText(_translate("MainWindow", "5"))
        self.rep2_btn.setText(_translate("MainWindow", "2"))
        self.rep6_btn.setText(_translate("MainWindow", "6"))
        self.rep3_btn.setText(_translate("MainWindow", "3"))


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 my main python file is :

from LoginWindowUI import Ui_LoginWindow
from MainWindowUI import Ui_MainWindow
from PyQt5 import QtCore,QtGui,QtWidgets
import sys
import mysql.connector

open_main_window_flag = False

class Main_Window():
    def __init__(self):
        app = QtWidgets.QApplication(sys.argv)
        self.MWindow = QtWidgets.QMainWindow()
        self.ui_MWindow = Ui_MainWindow()
        self.ui_MWindow.setupUi(self.MWindow)
        self.MWindow.show()
        sys.exit(app.exec_())


class login():
    def __init__(self):
        app = QtWidgets.QApplication(sys.argv)
        self.LoginWindow = QtWidgets.QMainWindow()
        self.ui_login = Ui_LoginWindow()
        self.ui_login.setupUi(self.LoginWindow)
        self.ui_login.login_btn.clicked.connect(self.loginform)
        self.authentication_flag = False
        self.LoginWindow.show()
        sys.exit(app.exec_())

    def loginform(self):
        global open_main_window_flag
        db_user = self.ui_login.username_ldt.text()
        db_pass = self.ui_login.password_ldt.text()
        if(db_user == 'admin' and db_pass=='admin'):
            print('Welcome')
            self.authentication_flag = True
        else:
            print('Try Again')
            self.authentication_flag = False

        if self.authentication_flag:
            self.LoginWindow.close()
            open_main_window_flag = True


if __name__ == '__main__':
    mylogin = login()
    if open_main_window_flag:
         mymainwindow = Main_Window()

I want that when user enter "admin","admin" in username and password this window colsed and open second ui file .

1 Answer 1

2

You have the following errors:

  • There can only be one object of the QApplication, you are creating one for each window and that is incorrect.

  • Avoid using global variables, they are considered a bad practice and few cases are necessary. For more information read: Why are global variables evil?

  • Qt Designer does not offer a widget but a class that serves to fill a widget so PyQt recommend to create a suitable widget class and fill it with that class, for more information read: http://pyqt.sourceforge.net/Docs/PyQt5/designer.html

Going to the point, you can not use a flag because the process is asynchronous, in Qt you work with signals, that's the correct way to inform that there is a change, for example a way to keep the classes separate is to create a signal that indicates that you have logged in, close the window and open the other window.

from LoginWindowUI import Ui_LoginWindow
from MainWindowUI import Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets


class Main_Window(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(Main_Window, self).__init__(parent)
        self.setupUi(self)

class LoginWindow(QtWidgets.QMainWindow, Ui_LoginWindow):
    logged = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        super(LoginWindow, self).__init__(parent)
        self.setupUi(self)
        self.login_btn.clicked.connect(self.authenticate)

    @QtCore.pyqtSlot()
    def authenticate(self):
        db_user = self.username_ldt.text()
        db_pass = self.password_ldt.text()
        if db_user == 'admin' and db_pass=='admin':
            self.logged.emit()
            self.close()

def main():
    import sys

    app = QtWidgets.QApplication(sys.argv)
    login = LoginWindow()
    w = Main_Window()
    login.logged.connect(w.show)
    login.show()
    sys.exit(app.exec_())


if __name__ == '__main__': main()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.