Python 如何根据记录的用户状态连接三个不同的屏幕?
我只是被困在第一期。成功登录后,应根据管理员、工作人员和访问者切换到主屏幕。(这三个有不同的屏幕) 我只是看了一些教程,做了这个。我可以根据用户类型弹出不同的屏幕,但因为我刚刚连接到新的py文件,所以它会在上一个屏幕的基础上增加额外的屏幕。我需要关闭前一个并弹出新的 这是登录文件。既然注册似乎是正确的,我就不把它附在这里了。我有三个文件,职员,管理员,访客。例如,我将仅在此处附加staff.py。如果问题解决,我可以处理其他开关屏幕功能。当登录用户具有“staff”用户类型时,请帮助我切换到staff屏幕 login.pyPython 如何根据记录的用户状态连接三个不同的屏幕?,python,pyqt,pyqt5,qt-designer,Python,Pyqt,Pyqt5,Qt Designer,我只是被困在第一期。成功登录后,应根据管理员、工作人员和访问者切换到主屏幕。(这三个有不同的屏幕) 我只是看了一些教程,做了这个。我可以根据用户类型弹出不同的屏幕,但因为我刚刚连接到新的py文件,所以它会在上一个屏幕的基础上增加额外的屏幕。我需要关闭前一个并弹出新的 这是登录文件。既然注册似乎是正确的,我就不把它附在这里了。我有三个文件,职员,管理员,访客。例如,我将仅在此处附加staff.py。如果问题解决,我可以处理其他开关屏幕功能。当登录用户具有“staff”用户类型时,请帮助我切换到st
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_())
首先,我建议您阅读关于Qt Designer使用的文章,它指出您不应该修改pyuic生成的.py,而应该创建另一个使用该设计并继承正确小部件的类 我为什么推荐PyQt? 因为Qt设计器生成的类不是一个小部件,它不会有像
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_())
我很抱歉。我是新的这个网站以及编程。基本上,当你看到我附加的第二张图片时,它会不断添加额外的屏幕,我绝对不想要它。当我在谷歌上搜索的时候,我看到人们推荐这个节目并关闭了上一个。但我不知道怎么做。我在changeToStaffScreen(self)中尝试了self.close()。但它不起作用…还是看看好吗?我删除了一些无用的代码。这太棒了!我确实学习了很多。希望能像你一样!非常感谢你。。即使我有更多的事情要做:(我能问一个很快的问题吗?实际上,这个应用程序包括了将近40页。我想我会很接近并且显示出方法,因为对于像我这样的超级初学者来说它其实更容易。但是我有一个前一个屏幕的后退按钮,当我考虑这一点时,将HID()代替Couter()。会是更好的选择吗??