程序代码篇---Pyqt的密码界面
文章目录
- 前言
- 一、代码
- 二、代码解释
- 2.1用户数据库定义
- 2.2窗口初始化
- 2.3认证逻辑
- 2.5角色处理
- 2.6错误处理优化
- 2.7功能扩展说明
- 2.7.1用户类型区分
- 管理员
- 普通用户
- 其他用户
- 2.7.2安全增强建议
- 三、运行效果
- 四、运行命令
- 五、界面改进建议
- 5.1密码显示
- 5.2用户头像显示
- 5.3输入框动画效果
- 5.4加载进度显示
- 5.5键盘快捷键
前言
本文简单介绍了在Ubuntu系统上使用Python的Pyqt创建密码登录系统(多用户)。
一、代码
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit,
QPushButton, QVBoxLayout, QHBoxLayout, QMessageBox)
from PyQt5.QtCore import Qt
#用户数据库(实际应使用加密存储)
USER_DB = {
"admin": {
"password": "admin123",
"role": "administrator"
},
"user1": {
"password": "user123",
"role": "regular"
},
"guest": {
"password": "guest123",
"role": "regular"
}
}
class LoginWindow(QWidget):
def __init__(self):
super().__init__()
# 窗口初始化
self.setWindowTitle("多用户登录系统")
self.setFixedSize(400, 200) # 固定窗口大小
# 创建界面组件
self.init_ui()
def init_ui(self):
"""界面布局初始化"""
# 用户名组件
lbl_user = QLabel("用户名:")
self.txt_user = QLineEdit()
self.txt_user.setPlaceholderText("输入用户名")
# 密码组件
lbl_pwd = QLabel("密码:")
self.txt_pwd = QLineEdit()
self.txt_pwd.setPlaceholderText("输入密码")
self.txt_pwd.setEchoMode(QLineEdit.Password)
# 登录按钮
btn_login = QPushButton("登录")
btn_login.clicked.connect(self.authenticate)
# 错误提示
self.lbl_error = QLabel()
self.lbl_error.setStyleSheet("color: red;")
self.lbl_error.hide()
# 布局管理
main_layout = QVBoxLayout()
# 用户名行
user_layout = QHBoxLayout()
user_layout.addWidget(lbl_user)
user_layout.addWidget(self.txt_user)
# 密码行
pwd_layout = QHBoxLayout()
pwd_layout.addWidget(lbl_pwd)
pwd_layout.addWidget(self.txt_pwd)
# 组合所有组件
main_layout.addLayout(user_layout)
main_layout.addLayout(pwd_layout)
main_layout.addWidget(self.lbl_error)
main_layout.addWidget(btn_login, alignment=Qt.AlignCenter)
self.setLayout(main_layout)
def authenticate(self):
"""用户认证逻辑"""
username = self.txt_user.text().strip()
password = self.txt_pwd.text().strip()
# 检查用户名是否存在
if username not in USER_DB:
self.show_error("用户不存在")
return
# 验证密码
if USER_DB[username]["password"] != password:
self.show_error("密码错误")
return
# 登录成功处理
role = USER_DB[username]["role"]
self.handle_login_success(username, role)
def show_error(self, message):
"""显示错误信息"""
self.lbl_error.setText(message)
self.lbl_error.show()
self.txt_pwd.clear()
def handle_login_success(self, username, role):
"""登录成功处理"""
self.lbl_error.hide()
# 根据用户角色显示不同欢迎信息
if role == "administrator":
welcome_msg = f"欢迎管理员 {username}!您有系统管理权限"
else:
welcome_msg = f"欢迎用户 {username}!普通用户模式"
QMessageBox.information(self, "登录成功", welcome_msg)
self.close()
# 这里可以打开不同角色的主界面
# if role == "administrator":
# open_admin_panel()
# else:
# open_user_panel()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = LoginWindow()
window.show()
sys.exit(app.exec_())
二、代码解释
2.1用户数据库定义
USER_DB = {
"admin": {
"password": "admin123",
"role": "administrator"
},
# ...其他用户
}
- 使用字典模拟用户数据库
- 每个用户包含密码和角色属性
- 实际应用应使用数据库存储并加密密码
2.2窗口初始化
self.setFixedSize(400, 200) # 禁止调整窗口大小
- 使用固定尺寸保证界面布局稳定性
2.3认证逻辑
def authenticate(self):
# 先检查用户是否存在
if username not in USER_DB:
self.show_error("用户不存在")
return
# 再验证密码
if USER_DB[username]["password"] != password:
self.show_error("密码错误")
return
- 分步验证:先验证用户存在性,再验证密码
- 不同错误类型给出不同提示,提升用户体验
2.5角色处理
def handle_login_success(self, username, role):
if role == "administrator":
welcome_msg = f"欢迎管理员 {username}!您有系统管理权限"
else:
welcome_msg = f"欢迎用户 {username}!普通用户模式"
- 根据用户角色显示不同欢迎信息
- 实际应用中可在此处打开不同权限的主界面
2.6错误处理优化
def show_error(self, message):
self.lbl_error.setText(message)
self.lbl_error.show()
self.txt_pwd.clear() # 自动清空密码框
- 统一错误处理函数
- 清空密码框保证安全性
2.7功能扩展说明
2.7.1用户类型区分
管理员
管理员(administrator):具有系统管理权限
普通用户
普通用户(regular):基础使用权限
其他用户
可通过添加更多角色类型扩展
2.7.2安全增强建议
#密码加密示例(需安装pycryptodome)
from Crypto.Hash import SHA256
def encrypt(password):
return SHA256.new(password.encode()).hexdigest()
#存储时保存加密后的密码
USER_DB = {
"admin": {
"password": encrypt("admin123"),
"role": "administrator"
}
}
- 实际应用必须使用密码哈希存储
- 推荐使用bcrypt或Argon2等专业加密算法
三、运行效果
- 当输入不存在的用户名时显示"用户不存在"
- 输入错误密码显示"密码错误"
- 管理员登录成功显示管理权限提示
- 普通用户登录显示普通模式提示
- 密码框自动隐藏输入内容
四、运行命令
#确保已安装PyQt5
sudo apt-get install python3-pyqt5
#运行程序
python3 multi_user_login.py
五、界面改进建议
5.1密码显示
添加密码显示/隐藏切换按钮
5.2用户头像显示
增加用户头像显示
5.3输入框动画效果
实现输入框动画效果
5.4加载进度显示
添加加载进度提示
5.5键盘快捷键
支持键盘快捷键操作(如Enter键登录)