我只是停留在第一期。成功登录后,则应根据管理员,员工和访客切换到主屏幕。 (这三个屏幕不同)。
我只是看了一些教程并做到了。我可以根据用户类型弹出不同的屏幕,但是由于我刚连接到新的py文件,因此可以使其他屏幕保持在上一个屏幕之上。我需要关闭上一个并弹出新的。
这是登录文件。由于注册似乎可以正常工作,因此我不会在此处附加它。我有三个文件,分别是工作人员,管理员,访客。例如,我将仅在此处附加staff.py。如果问题解决,我可以处理其他开关屏幕功能。当登录的用户具有“ staff”用户类型时,请帮助我切换到人员屏幕。
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_())
答案 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_())