PyQt5实现登录界面,包含用户注册,记住密码功能 您所在的位置:网站首页 诚信教育包括哪些 PyQt5实现登录界面,包含用户注册,记住密码功能

PyQt5实现登录界面,包含用户注册,记住密码功能

2023-12-22 01:56| 来源: 网络整理| 查看: 265

本文主要基于PyQt5用的是qt designer,连接MySQL实现登录界面,包含注册功能,记住密码功能,说明这一切都是基于在pycharm上配置好了pyuic和qt designer

目录 1、实际效果2、数据库说明2.1 连接数据库2.2 生成初始表 3、注册3.1 注册按钮实现窗口切换,信号与槽3.3.1 跳转到注册界面代码3.3.2 注册界面跳转回登录界面 代码自取

1、实际效果

界面都是用designer布局的,没有用代码去写,里面用到的信号以及功能是自己写的代码实现的。账号密码保存的在MySQL数据表里,账号是主键具有唯一性。密码设置不可见,可以记住上一次登录的密码。

在这里插入图片描述

注册的账号是主键具有唯一性,密码必须大于6位

在这里插入图片描述

2、数据库说明 2.1 连接数据库

这一步请看我写的这个博客pyqt5连接mysql数据库

2.2 生成初始表

连接到数据库成功后,需要创建一个用来存储账户密码信息的表,创建用基础的SQL语句就行了

3、注册

数据库连接后,我们可以着手第一步注册一个新账号

3.1 注册按钮实现窗口切换,信号与槽

这一步的要求是,点击注册按钮跳转到注册界面,注册成功后跳转到登录界面。实现这一过程的是QT的核心机制,信号与槽。

我们用qt designer画好登录界面和注册界面,然后用pyuic或者你用终端命令将ui文件转换成py文件。注意后面的我们的实现不要在转换的这个py文件里面实现,因为如果ui有其它改动重新生成就会影响你开始写的代码,我们要重新建一个py文件,比如登录界面生成的文件位login.py,我们重新建一个call_login.py文件来对登录界面进行功能实现,注册界面也一样。

3.3.1 跳转到注册界面代码

call_login.py完整代码

from PyQt5.QtWidgets import * from Login_module.login import Ui_LoginUi #导入login文件 from Login_module.Con_MySQL import * #导入数据库文件 from Login_module.call_regist import MainRegistWindow #导入注册文件 import sys import configparser global UserName UserP = {} #定义一个存储密码账号的元组 class MainLoginWindow(QWidget, Ui_LoginUi): def __init__(self, parent=None): super(MainLoginWindow, self).__init__(parent) self.re = MainRegistWindow() # 这边一定要加self self.setupUi(self) self.initUi() def initUi(self): self.IsRememberUser() self.UserName.setFocus() self.UserName.setPlaceholderText("请输入账号") self.PassWord.setPlaceholderText("请输入密码") self.PassWord.setEchoMode(QLineEdit.Password) # 密码隐藏 self.RegistButton.clicked.connect(self.regist_button) # 跳转到注册页面 self.re.SuccessReg.connect(self.Success_Regist) # 注册或者取消跳转回来 self.LoginButton.clicked.connect(self.login_button) # 登录 self.LogoutButton.clicked.connect(self.logout_button) # 退出 """设置记住密码""" def IsRememberUser(self): config = configparser.ConfigParser() file = config.read('user.ini') #读取密码账户的配置文件 config_dict = config.defaults() #返回包含实例范围默认值的字典 self.account = config_dict['user_name'] #获取账号信息 self.UserName.setText(self.account) #写入账号上面 if config_dict['remember'] == 'True': self.passwd = config_dict['password'] self.PassWord.setText(self.passwd) self.RememberUser.setChecked(True) else: self.RememberUser.setChecked(False) """设置配置文件格式""" def config_ini(self): self.account = self.UserName.text() self.passwd = self.PassWord.text() config = configparser.ConfigParser() if self.RememberUser.isChecked(): config["DEFAULT"] = { "user_name":self.account, "password":self.passwd, "remember":self.RememberUser.isChecked() } else: config["DEFAULT"] = { "user_name": self.account, "password": "", "remember": self.RememberUser.isChecked() } with open('user.ini', 'w') as configfile: config.write((configfile)) print(self.account, self.passwd) #注册 def regist_button(self): #载入数据库 # self.sql = Oper_Mysql() # self.sql.ZSGC_Mysql() self.re.show() w.close() #登录 def login_button(self): self.sql = Oper_Mysql() if QSqlDatabase.contains("qt_sql_default_connection"): db = QSqlDatabase.database("qt_sql_default_connection") else: db = QSqlDatabase.addDatabase("QMYSQL") Login_User = self.UserName.text() Login_Passwd = self.PassWord.text() # print(type(Login_User)) # print(type(Login_Passwd)) if Login_User == 0 or Login_Passwd.strip() == '': QMessageBox.information(self, "error", "输入错误") else: self.config_ini() #加载用户密码配置文件 query = QSqlQuery() query.exec_("select *from Management") while query.next(): UserID = str(query.value("M_UserID")) UserPasswd = query.value("M_PassWord") UserP[UserID] = UserPasswd length = len(UserP) for key in UserP: length = length - 1 if key == Login_User and UserP[Login_User] == Login_Passwd: #密码和账号都对的情况下 mess = QMessageBox() mess.setWindowTitle("Success") mess.setText("登录成功") mess.setStandardButtons(QMessageBox.Ok) mess.button(QMessageBox.Ok).animateClick(1000) #弹框定时关闭 mess.exec_() print("登录成功") """跳转到主界面""" self.MainWin.show() w.close() return True elif key != Login_User and length == 0: QMessageBox.information(self, "waining", "账号不存在", QMessageBox.Ok) return False elif key == Login_User and UserP[Login_User] != Login_Passwd: QMessageBox.information(self, "error!", "密码输入错误", QMessageBox.Ok) return False #退出 def logout_button(self): #警告对话框 messageBox = QMessageBox(QMessageBox.Warning, "警告", "是否退出系统!") Qyes = messageBox.addButton(self.tr("确认"), QMessageBox.YesRole) Qno = messageBox.addButton(self.tr("取消"), QMessageBox.NoRole) messageBox.setDefaultButton(Qno) #默认焦点 messageBox.exec_() #保持 if messageBox.clickedButton() == Qyes: w.close() else: return #成功注册 def Success_Regist(self): w.show() self.re.close() if __name__=="__main__": app=QApplication(sys.argv) w=MainLoginWindow() w.show() sys.exit(app.exec()) 3.3.2 注册界面跳转回登录界面

两种情况下会跳转回登录界面,一是点击取消,二是注册成功。这时不能向上面跳转到注册界面这么简单直接跳回登录界面,那样会造成线程死亡跳转失败。我们要将登录界面当做主窗口,注册界面当做子窗口,子窗口只发信号,主窗口执行操作。

call_regist.py完整代码

from PyQt5.QtWidgets import * from Login_module.regist import Ui_RegistUi from PyQt5.QtCore import pyqtSignal,Qt from Login_module.Con_MySQL import* class MainRegistWindow(QWidget, Ui_RegistUi): SuccessReg = pyqtSignal() # 定义一个注册成功信号 def __init__(self, parent=None): super(MainRegistWindow, self).__init__(parent) self.setupUi(self) self.initUI() def initUI(self): self.ReginAccount.setFocus() #鼠标焦点 self.ReginAccount.setPlaceholderText("请输入注册账户") self.UserName.setPlaceholderText("请输入姓名") #提示信息 self.PassWord.setPlaceholderText("请输入密码") self.PassWordSure.setPlaceholderText("请确认密码") self.PassWord.setEchoMode(QLineEdit.Password) #密码隐藏 self.PassWordSure.setEchoMode(QLineEdit.Password) self.comboBox.setCurrentIndex(0) #设置默认值 为空 self.comboBox.activated.connect(self.emit_identity) #当选中下拉框时发射信号 self.ReginAccount.textChanged.connect(self.emit_Account) #注册账号 self.UserName.textChanged.connect(self.emit_Username) #姓名改变时 self.PassWord.textChanged.connect(self.emit_Password) #密码 self.PassWordSure.textChanged.connect(self.emit_ConPassword) #确认密码 self.ConfirmButton.clicked.connect(self.emit_Confir_Button) #确认 self.CancelButton.clicked.connect(self.emit_Cancel) #取消 def emit_Account(self): print("Account发生改变") def emit_Username(self): print("UserName发生改变") def emit_Password(self): print("PassWord发生改变") def emit_ConPassword(self): print("ConPassword发生改变") def emit_identity(self): # 发射身份信号 print(self.comboBox.currentText()) def emit_Confir_Button(self): if self.comboBox.currentText().strip() == '' or self.ReginAccount.text().strip() == '' or self.PassWordSure.text().strip() == '' \ or self.PassWord.text().strip() == '' or self.UserName.text().strip() == '': try: QMessageBox.information(self, "error", "输入有误,请重新输入") except Exception as str: print("输入错误 %s" % (str)) elif len(self.PassWord.text())


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有