基于pyqt6和mysql实现用户登录注册功能和界面跳转
时间: 2023-09-03 16:16:37 浏览: 159
以下是基于PyQt6和MySQL实现用户登录注册功能和界面跳转的示例代码,包括登录界面、注册界面和主界面三个界面,实现了用户注册、登录、注销和界面之间的跳转。
```python
from PyQt6 import QtCore, QtGui, QtWidgets, QtSql
import mysql.connector
class Login(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Login")
# layout
layout = QtWidgets.QVBoxLayout(self)
# username input
self.username_input = QtWidgets.QLineEdit()
self.username_input.setPlaceholderText("Username")
layout.addWidget(self.username_input)
# password input
self.password_input = QtWidgets.QLineEdit()
self.password_input.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
self.password_input.setPlaceholderText("Password")
layout.addWidget(self.password_input)
# login button
login_button = QtWidgets.QPushButton("Login")
login_button.clicked.connect(self.login)
layout.addWidget(login_button)
# register button
register_button = QtWidgets.QPushButton("Register")
register_button.clicked.connect(self.show_register)
layout.addWidget(register_button)
def login(self):
username = self.username_input.text()
password = self.password_input.text()
# connect to database
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
# check if user exists
sql = "SELECT * FROM users WHERE username = %s AND password = %s"
val = (username, password)
mycursor.execute(sql, val)
result = mycursor.fetchone()
if result:
# login successful, open main window
self.main = MainWindow()
self.main.show()
self.close()
else:
# login failed, show error message
QtWidgets.QMessageBox.warning(self, "Error", "Invalid username or password")
def show_register(self):
# show register window
self.register = Register()
self.register.show()
self.close()
class Register(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Register")
# layout
layout = QtWidgets.QVBoxLayout(self)
# username input
self.username_input = QtWidgets.QLineEdit()
self.username_input.setPlaceholderText("Username")
layout.addWidget(self.username_input)
# password input
self.password_input = QtWidgets.QLineEdit()
self.password_input.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
self.password_input.setPlaceholderText("Password")
layout.addWidget(self.password_input)
# confirm password input
self.confirm_password_input = QtWidgets.QLineEdit()
self.confirm_password_input.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
self.confirm_password_input.setPlaceholderText("Confirm Password")
layout.addWidget(self.confirm_password_input)
# register button
register_button = QtWidgets.QPushButton("Register")
register_button.clicked.connect(self.register)
layout.addWidget(register_button)
# back button
back_button = QtWidgets.QPushButton("Back")
back_button.clicked.connect(self.show_login)
layout.addWidget(back_button)
def register(self):
username = self.username_input.text()
password = self.password_input.text()
confirm_password = self.confirm_password_input.text()
if password != confirm_password:
# password and confirm password do not match, show error message
QtWidgets.QMessageBox.warning(self, "Error", "Passwords do not match")
return
# connect to database
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
# check if user exists
sql = "SELECT * FROM users WHERE username = %s"
val = (username,)
mycursor.execute(sql, val)
result = mycursor.fetchone()
if result:
# user already exists, show error message
QtWidgets.QMessageBox.warning(self, "Error", "User already exists")
return
# insert new user to database
sql = "INSERT INTO users (username, password) VALUES (%s, %s)"
val = (username, password)
mycursor.execute(sql, val)
mydb.commit()
# registration successful, show success message and go back to login window
QtWidgets.QMessageBox.information(self, "Success", "User registered successfully")
self.show_login()
def show_login(self):
# show login window
self.login = Login()
self.login.show()
self.close()
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Main")
# layout
central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
layout = QtWidgets.QVBoxLayout(central_widget)
# welcome label
welcome_label = QtWidgets.QLabel("Welcome!")
welcome_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
welcome_label.setFont(QtGui.QFont("Arial", 20))
layout.addWidget(welcome_label)
# logout button
logout_button = QtWidgets.QPushButton("Logout")
logout_button.clicked.connect(self.logout)
layout.addWidget(logout_button)
def logout(self):
# logout and go back to login window
self.login = Login()
self.login.show()
self.close()
if __name__ == "__main__":
app = QtWidgets.QApplication([])
# connect to database
db = QtSql.QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("localhost")
db.setUserName("yourusername")
db.setPassword("yourpassword")
db.setDatabaseName("mydatabase")
if not db.open():
QtWidgets.QMessageBox.warning(None, "Error", "Database connection failed")
exit(-1)
# show login window
login = Login()
login.show()
app.exec()
```
在这段代码中,我们首先创建了三个界面:登录界面、注册界面和主界面。登录界面包含了用户名和密码的输入框和登录按钮,点击登录按钮后会检查用户是否存在于数据库中,如果存在则跳转到主界面,否则弹出错误提示。注册界面包含了用户名、密码和确认密码的输入框和注册按钮,点击注册按钮后会检查用户名是否已经存在于数据库中,如果不存在则将用户信息插入到数据库中,注册成功后回到登录界面。主界面包含了欢迎标签和注销按钮,点击注销按钮后回到登录界面。
在主程序中,我们首先连接到数据库,如果连接失败则弹出错误提示。然后显示登录界面,进入主程序循环。