如何根据登录的用户状态连接三个不同的屏幕?

时间:2018-11-17 02:23:54

标签: python pyqt pyqt5

我只是停留在第一期。成功登录后,则应根据管理员,员工和访客切换到主屏幕。 (这三个屏幕不同)。

我只是看了一些教程并做到了。我可以根据用户类型弹出不同的屏幕,但是由于我刚连接到新的py文件,因此可以使其他屏幕保持在上一个屏幕之上。我需要关闭上一个并弹出新的。

这是登录文件。由于注册似乎可以正常工作,因此我不会在此处附加它。我有三个文件,分别是工作人员,管理员,访客。例如,我将仅在此处附加staff.py。如果问题解决,我可以处理其他开关屏幕功能。当登录的用户具有“ staff”用户类型时,请帮助我切换到人员屏幕。

enter image description here

enter image description here

login.py

import pymysql
from PyQt5 import QtCore, QtGui, QtWidgets
from sign import Ui_SignUp
from admin import Ui_adminWindow
from visitor import Ui_visitorWindow
from staff import Ui_staffWindow

class Ui_loginWindow(object):
    def changeToAdminScreen(self):
        self.adminWindow = QtWidgets.QMainWindow()
        self.ui = Ui_adminMainWindow();
        self.ui.setupUi(self.adminWindow)
        self.adminWindow.show()
        self.close()
    def changeToVisitorScreen(self):
        self.visitorWindow = QtWidgets.QMainWindow()
        self.ui = Ui_visitorMainWindow();
        self.ui.setupUi(self.visitorWindow)
        self.visitorWindow.show()
    def changeToStaffScreen(self):
        self.staffWindow = QtWidgets.QMainWindow()
        self.ui = Ui_staffWindow();
        self.ui.setupUi(self.staffWindow)
        # self.connect(self.staffWindow)
        self.staffWindow.show()
    def changeToSignUpScreen(self):
        self.signUpWindow = QtWidgets.QDialog()
        self.ui = Ui_SignUp();
        self.ui.setupUi(self.signUpWindow)
        self.signUpWindow.show()
    def successWindowShow(self, usertype):
        if(usertype == 'staff'):
            self.changeToStaffScreen()
        if (usertype == 'admin'):
            self.changeToAdminScreen()
        if(usertype == 'visitor'):
            self.changeToVisitorScreen()

    def failedMessage(self, title, message):
        msgBox = QtWidgets.QMessageBox()
        msgBox.setIcon(QtWidgets.QMessageBox.Warning)
        msgBox.setWindowTitle(title)
        msgBox.setText(message)
        msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
        msgBox.exec_()
    def loginCheck(self):
        email = self.log_email_line.text()
        password = self.log_pass_line.text()
        connection = pymysql.connect(host ='127.0.0.1', port = 3306, user = 'root',password='mr1035122')
        cursor = connection.cursor()
        cursor.execute("SELECT * FROM ZOO.USER AS USER WHERE USER.Email = %s AND User.Password = %s", (email, password))
        result = cursor.fetchall()
        if(len(result) > 0):
            print("login success! Welcome to the atlanta zoo")
            cursor.execute("SELECT UserType From zoo.User")
            self.successWindowShow(cursor.fetchone()[0])
        else:
            print("incorrect email or password. Please check whether you entered correctly. or if you are new user, please sign up")
            msg ="incorrect email or password. Please check whether you entered correctly. or if you are new user, please sign up"
            self.failedMessage("failed login", msg)
        connection.close()
    def signUpCheck(self):
        self.changeToSignUpScreen()
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("background:rgb(237, 212, 0)")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem, 1, 0, 1, 1)
        spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem1, 6, 2, 1, 1)
        self.log_email_line = QtWidgets.QLineEdit(self.centralwidget)
        self.log_email_line.setStyleSheet("background:rgb(238, 238, 236)")
        self.log_email_line.setObjectName("log_email_line")
        self.gridLayout.addWidget(self.log_email_line, 2, 2, 1, 1)
        self.login_button = QtWidgets.QPushButton(self.centralwidget)
        self.login_button.setStyleSheet("background:rgb(186, 189, 182)")
        self.login_button.setObjectName("login_button")
        #######################login_button event########################
        self.login_button.clicked.connect(self.loginCheck)
        #################################################################
        self.gridLayout.addWidget(self.login_button, 4, 2, 1, 1)
        self.email_label = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(13)
        font.setBold(True)
        font.setWeight(75)
        self.email_label.setFont(font)
        self.email_label.setAlignment(QtCore.Qt.AlignCenter)
        self.email_label.setObjectName("email_label")
        self.gridLayout.addWidget(self.email_label, 2, 1, 1, 1)
        spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem2, 0, 2, 1, 1)
        self.log_pass_line = QtWidgets.QLineEdit(self.centralwidget)
        self.log_pass_line.setStyleSheet("background:rgb(238, 238, 236)")
        self.log_pass_line.setObjectName("log_pass_line")
        self.gridLayout.addWidget(self.log_pass_line, 3, 2, 1, 1)
        self.password_label = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(13)
        font.setBold(True)
        font.setWeight(75)
        self.password_label.setFont(font)
        self.password_label.setAlignment(QtCore.Qt.AlignCenter)
        self.password_label.setObjectName("password_label")
        self.gridLayout.addWidget(self.password_label, 3, 1, 1, 1)
        spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem3, 1, 3, 1, 1)
        self.signup_button = QtWidgets.QPushButton(self.centralwidget)
        self.signup_button.setStyleSheet("background:rgb(186, 189, 182)")
        self.signup_button.setObjectName("signup_button")
        #######################signup_button event########################
        self.signup_button.clicked.connect(self.signUpCheck)
        ################################################################
        self.gridLayout.addWidget(self.signup_button, 5, 2, 1, 1)
        self.title_label = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(16)
        self.title_label.setFont(font)
        self.title_label.setAlignment(QtCore.Qt.AlignCenter)
        self.title_label.setObjectName("title_label")
        self.gridLayout.addWidget(self.title_label, 1, 1, 1, 2)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        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.login_button.setText(_translate("MainWindow", "Login"))
        self.email_label.setText(_translate("MainWindow", "Email"))
        self.password_label.setText(_translate("MainWindow", "password"))
        self.signup_button.setText(_translate("MainWindow", "Sign Up"))
        self.title_label.setText(_translate("MainWindow", "Welcome to Atlanta Zoo"))

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

staff.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_staffWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("background:rgb(237, 212, 0)")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.logOut = QtWidgets.QPushButton(self.centralwidget)
        self.logOut.setStyleSheet("background:rgb(186, 189, 182)")
        self.logOut.setObjectName("logOut")
        self.gridLayout.addWidget(self.logOut, 4, 1, 1, 1)
        self.searchAnimals = QtWidgets.QPushButton(self.centralwidget)
        self.searchAnimals.setStyleSheet("background:rgb(186, 189, 182)")
        self.searchAnimals.setObjectName("searchAnimals")
        self.gridLayout.addWidget(self.searchAnimals, 2, 1, 1, 1)
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem, 0, 1, 1, 1)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem1, 4, 2, 1, 1)
        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem2, 4, 0, 1, 1)
        self.viewShowsHistory = QtWidgets.QPushButton(self.centralwidget)
        self.viewShowsHistory.setStyleSheet("background:rgb(186, 189, 182)")
        self.viewShowsHistory.setObjectName("viewShowsHistory")
        self.gridLayout.addWidget(self.viewShowsHistory, 3, 1, 1, 1)
        self.title_label_2 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(16)
        self.title_label_2.setFont(font)
        self.title_label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.title_label_2.setObjectName("title_label_2")
        self.gridLayout.addWidget(self.title_label_2, 1, 1, 1, 1)
        spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem3, 5, 1, 1, 1)
        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.logOut.setText(_translate("MainWindow", "Log out"))
        self.searchAnimals.setText(_translate("MainWindow", "Search for Animals"))
        self.viewShowsHistory.setText(_translate("MainWindow", "View Shows"))
        self.title_label_2.setText(_translate("MainWindow", "Welcome to Atlanta Zoo"))

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

1 个答案:

答案 0 :(得分:0)

首先,我建议您阅读有关Qt Designer的用法的official documentation,它指示您不应修改pyuic生成的.py,而应创建另一个使用该设计并继承正确小部件的类。

为什么我建议使用PyQt?

由于Qt Designer生成的类不是窗口小部件,因此不会具有close()之类的窗口小部件方法。


这正是因为窗口没有关闭。

因此解决方案是还原login.py或再次重新生成它(后者是最简单的事情),然后在类所在的位置创建main.py,然后我们将实现逻辑:

main.py

import pymysql
from PyQt5 import QtCore, QtGui, QtWidgets

from login import Ui_loginWindow
from sign import Ui_SignUp
from admin import Ui_adminWindow
from visitor import Ui_visitorWindow
from staff import Ui_staffWindow


class SignUp(QtWidgets.QDialog, Ui_SignUp):
    def __init__(self, parent=None):
        super(SignUp, self).__init__(parent)
        self.setupUi(self)

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

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

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

class LoginWindow(QtWidgets.QMainWindow, Ui_loginWindow):
    def __init__(self, parent=None):
        super(LoginWindow, self).__init__(parent)
        self.setupUi(self)
        #######################login_button event########################
        self.login_button.clicked.connect(self.loginCheck)
        #################################################################
        #######################signup_button event#######################
        self.signup_button.clicked.connect(self.signUpCheck)
        #################################################################

    def changeToAdminScreen(self):
        self.adminWindow = AdminWindow()
        self.adminWindow.show()
        self.close()

    def changeToVisitorScreen(self):
        self.visitorWindow = VisitorWindow()
        self.visitorWindow.show()
        self.close()

    def changeToStaffScreen(self):
        self.staffWindow = StaffWindow()
        self.staffWindow.show()
        self.close()

    def changeToSignUpScreen(self):
        self.signUpWindow = SignUp()
        self.signUpWindow.show()

    def successWindowShow(self, usertype):
        if usertype == 'staff':
            self.changeToStaffScreen()
        elif usertype == 'admin':
            self.changeToAdminScreen()
        elif usertype == 'visitor':
            self.changeToVisitorScreen()

    def failedMessage(self, title, message):
        msgBox = QtWidgets.QMessageBox()
        msgBox.setIcon(QtWidgets.QMessageBox.Warning)
        msgBox.setWindowTitle(title)
        msgBox.setText(message)
        msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
        msgBox.exec_()

    @QtCore.pyqtSlot()
    def loginCheck(self):
        email = self.log_email_line.text()
        password = self.log_pass_line.text()
        connection = pymysql.connect(host ='127.0.0.1', port = 3306, user = 'root',password='mr1035122')
        cursor = connection.cursor()
        cursor.execute("SELECT * FROM ZOO.USER AS USER WHERE USER.Email = %s AND User.Password = %s", (email, password))
        result = cursor.fetchall()
        if (len(result) > 0):
            print("login success! Welcome to the atlanta zoo")
            cursor.execute("SELECT UserType From zoo.User")
            self.successWindowShow(cursor.fetchone()[0])
        else:
            print("incorrect email or password. Please check whether you entered correctly. or if you are new user, please sign up")
            msg ="incorrect email or password. Please check whether you entered correctly. or if you are new user, please sign up"
            self.failedMessage("failed login", msg)
        connection.close()

    @QtCore.pyqtSlot()
    def signUpCheck(self):
        self.changeToSignUpScreen()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = LoginWindow()
    w.show()
    sys.exit(app.exec_())