当前位置: 首页 > article >正文

程序代码篇---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"
    },
    # ...其他用户
}
  1. 使用字典模拟用户数据库
  2. 每个用户包含密码和角色属性
  3. 实际应用应使用数据库存储并加密密码

2.2窗口初始化

self.setFixedSize(400, 200)  # 禁止调整窗口大小
  1. 使用固定尺寸保证界面布局稳定性

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
  1. 分步验证:先验证用户存在性,再验证密码
  2. 不同错误类型给出不同提示,提升用户体验

2.5角色处理

def handle_login_success(self, username, role):
    if role == "administrator":
        welcome_msg = f"欢迎管理员 {username}!您有系统管理权限"
    else:
        welcome_msg = f"欢迎用户 {username}!普通用户模式"
  1. 根据用户角色显示不同欢迎信息
  2. 实际应用中可在此处打开不同权限的主界面

2.6错误处理优化

def show_error(self, message):
    self.lbl_error.setText(message)
    self.lbl_error.show()
    self.txt_pwd.clear()  # 自动清空密码框
  1. 统一错误处理函数
  2. 清空密码框保证安全性

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"
    }
}
  1. 实际应用必须使用密码哈希存储
  2. 推荐使用bcryptArgon2等专业加密算法

三、运行效果

  1. 当输入不存在的用户名时显示"用户不存在"
  2. 输入错误密码显示"密码错误"
  3. 管理员登录成功显示管理权限提示
  4. 普通用户登录显示普通模式提示
  5. 密码框自动隐藏输入内容

四、运行命令

#确保已安装PyQt5
sudo apt-get install python3-pyqt5
#运行程序
python3 multi_user_login.py

五、界面改进建议

5.1密码显示

添加密码显示/隐藏切换按钮

5.2用户头像显示

增加用户头像显示

5.3输入框动画效果

实现输入框动画效果

5.4加载进度显示

添加加载进度提示

5.5键盘快捷键

支持键盘快捷键操作(如Enter键登录)



http://www.kler.cn/a/598234.html

相关文章:

  • Agent TARS开源多模态 AI 代理的革命性突破
  • B树和 B+树
  • Security如何复制粘贴
  • Scikit-learn模型构建全流程解析:从数据预处理到超参数调优
  • 矩阵键盘原理与单片机驱动设计详解—端口反转法(下) | 零基础入门STM32第七十八步
  • 可视化操作界面,工程项目管理软件让复杂项目管理变简单
  • AWS SAP学习笔记-概念
  • 2025最新docker教程(四)
  • WPF 样式和模板的区别
  • 从零开始上手huggingface
  • 遇见东方微笑·畅游如意甘肃——“天水文化旅游嘉年华”2025年春季文旅宣传推广活动侧记
  • 利用 Agent TARS 技术实现互联网舆情监测与事件自动化创建的可行性与前景
  • 给语言模型增加知识逻辑校验智能,识别网络信息增量的垃圾模式
  • stm32-ADC
  • .gitignore使用指南
  • 管家婆工贸ERP PR004.委外完工验收明细表
  • 第十一章 | 智能合约主网部署与验证详解
  • Qt窗口控件之工具栏QToolBar
  • MCU vs SoC
  • 动态查找表