当前位置:   article > 正文

手把手教你开发Python桌面应用-PyQt6图书管理系统-登录功能代码逻辑实现

手把手教你开发Python桌面应用-PyQt6图书管理系统-登录功能代码逻辑实现

锋哥原创的PyQt6图书管理系统视频教程:

PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计21条视频,包括:PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~、第2讲 登录功能UI设计实现、第3讲 数据库操作工具包dbUtil.py封装等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV18t4y1R7Qp/我们在项目目录下,新建login.py文件,作为管理员登录模块源码文件,把前面登录UI文件用PyUIC生成的python文件,贴到当前login.py里面,我们要进行二次开发。

为了让源码能运行起来,我们把继承的类改成QWidget;

再加一个 构造方法;

  1. def __int__(self):
  2. super(Ui_Form, self).__init__()
  3. self.setupUi(self)

初步改成的代码如下:

  1. """
  2. 管理员登录模块
  3. 作者 : 小锋老师
  4. 官网 : www.python222.com
  5. """
  6. from PyQt6 import QtCore, QtGui, QtWidgets
  7. from PyQt6.QtWidgets import QWidget
  8. class Ui_Form(QWidget):
  9. def __int__(self):
  10. super(Ui_Form, self).__init__()
  11. self.setupUi(self)
  12. def setupUi(self, Form):
  13. Form.setObjectName("Form")
  14. Form.resize(487, 405)
  15. self.formLayoutWidget = QtWidgets.QWidget(parent=Form)
  16. self.formLayoutWidget.setGeometry(QtCore.QRect(90, 120, 311, 121))
  17. self.formLayoutWidget.setObjectName("formLayoutWidget")
  18. self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
  19. self.formLayout.setContentsMargins(10, 10, 10, 10)
  20. self.formLayout.setHorizontalSpacing(40)
  21. self.formLayout.setVerticalSpacing(30)
  22. self.formLayout.setObjectName("formLayout")
  23. self.label = QtWidgets.QLabel(parent=self.formLayoutWidget)
  24. self.label.setObjectName("label")
  25. self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label)
  26. self.userNameInput = QtWidgets.QLineEdit(parent=self.formLayoutWidget)
  27. self.userNameInput.setObjectName("userNameInput")
  28. self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.userNameInput)
  29. self.label_2 = QtWidgets.QLabel(parent=self.formLayoutWidget)
  30. self.label_2.setObjectName("label_2")
  31. self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_2)
  32. self.passwordInput = QtWidgets.QLineEdit(parent=self.formLayoutWidget)
  33. self.passwordInput.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
  34. self.passwordInput.setObjectName("passwordInput")
  35. self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.passwordInput)
  36. self.loginBtn = QtWidgets.QPushButton(parent=Form)
  37. self.loginBtn.setGeometry(QtCore.QRect(110, 260, 75, 23))
  38. icon = QtGui.QIcon()
  39. icon.addPixmap(QtGui.QPixmap("../images/login.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
  40. self.loginBtn.setIcon(icon)
  41. self.loginBtn.setObjectName("loginBtn")
  42. self.resetBtn = QtWidgets.QPushButton(parent=Form)
  43. self.resetBtn.setGeometry(QtCore.QRect(290, 260, 75, 23))
  44. icon1 = QtGui.QIcon()
  45. icon1.addPixmap(QtGui.QPixmap("../images/reset.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
  46. self.resetBtn.setIcon(icon1)
  47. self.resetBtn.setObjectName("resetBtn")
  48. self.label_3 = QtWidgets.QLabel(parent=Form)
  49. self.label_3.setGeometry(QtCore.QRect(180, 40, 241, 61))
  50. font = QtGui.QFont()
  51. font.setPointSize(24)
  52. self.label_3.setFont(font)
  53. self.label_3.setObjectName("label_3")
  54. self.label_4 = QtWidgets.QLabel(parent=Form)
  55. self.label_4.setGeometry(QtCore.QRect(100, 40, 71, 61))
  56. self.label_4.setText("")
  57. self.label_4.setPixmap(QtGui.QPixmap("../images/logo.png"))
  58. self.label_4.setObjectName("label_4")
  59. self.retranslateUi(Form)
  60. QtCore.QMetaObject.connectSlotsByName(Form)
  61. def retranslateUi(self, Form):
  62. _translate = QtCore.QCoreApplication.translate
  63. Form.setWindowTitle(_translate("Form", "管理员登录"))
  64. self.label.setText(_translate("Form", "用户名:"))
  65. self.label_2.setText(_translate("Form", "密 码:"))
  66. self.loginBtn.setText(_translate("Form", "登录"))
  67. self.resetBtn.setText(_translate("Form", "重置"))
  68. self.label_3.setText(_translate("Form", "图书管理系统"))

我们写个main测试方法:

  1. if __name__ == '__main__':
  2. app = QApplication(sys.argv)
  3. ui = Ui_Form()
  4. ui.show()
  5. sys.exit(app.exec())

能运行出来,但是么有logo和icon图片。这个是引用图片的路径问题引起的。我们改下。

ctrl+R快捷键:把所有的'../'替换成'./',即可。

这样图标就出来了。

我们先实现简单的重置功能

先定义槽函数resetForm:

  1. def resetForm(self):
  2. """
  3. 重置表单
  4. :return:
  5. """
  6. self.userNameInput.setText("")
  7. self.passwordInput.setText("")

重置按钮点击事件绑定下槽函数

  1. # 重置按钮点击事件
  2. self.resetBtn.clicked.connect(self.resetForm)

我们再来实现点击登录按钮,实现登录判断功能。

我们采用的是面向对象设计思想,所以我们基于MVC实现,Controller控制层向Dao数据库访问层,传递数据的时候,采用对象传递,我们这里设计到用户对象,我们先来建一个用户实体对象。

单独建一个entity目录用来放项目实体文件。建一个UserModel.py

里面再建一个User实体类。

  1. """
  2. 用户实体类
  3. 作者 : 小锋老师
  4. 官网 : www.python222.com
  5. """
  6. # 用户实体类
  7. class User:
  8. # 编号 主键ID
  9. id = None
  10. # 用户名
  11. userName = None
  12. # 密码
  13. password = None
  14. def __init__(self, userName, password):
  15. self.userName = userName
  16. self.password = password

我们再单独建一个dao包目录,用来放所有的数据访问对象代码:

在dao下新建userDao.py,用户模块操作数据的代码文件

在userDao.py里,定义login方法,用来判断用户登录

  1. """
  2. 用户数据访问对象
  3. 作者 : 小锋老师
  4. 官网 : www.python222.com
  5. """
  6. from entity.UserModel import User
  7. from util import dbUtil
  8. def login(user: User):
  9. """
  10. 用户登录判断
  11. :param user:用户实体
  12. :return:登录成功返回用户信息实体,登录失败,返回None
  13. """
  14. con = None
  15. try:
  16. con = dbUtil.getCon()
  17. cursor = con.cursor()
  18. cursor.execute(f"select * from t_user where userName='{user.userName}' and password='{user.password}'")
  19. return cursor.fetchone()
  20. except Exception as e:
  21. print(e)
  22. con.rollback()
  23. return None
  24. finally:
  25. dbUtil.closeCon(con)

我们在login.py文件的Ui_Form类里,定义下login槽方法:

  1. def login(self):
  2. """
  3. 用户登录判断 数据库判断成功,则打开主窗体,否则提示报错信息
  4. :return:
  5. """
  6. userName = self.userNameInput.text()
  7. password = self.passwordInput.text()
  8. if userName.strip() == "" or password.strip() == "":
  9. QMessageBox.warning(None, '系统提示', '用户名或者密码不能为空!')
  10. else:
  11. user = User(userName, password)
  12. resultUser = userDao.login(user)
  13. if resultUser:
  14. QMessageBox.information(None, '系统提示', '用户登录成功!')
  15. else:
  16. QMessageBox.warning(None, '系统提示', '用户名或者密码输入错误!')

登录按钮点击事件绑定下槽函数:

  1. # 登录按钮点击事件
  2. self.loginBtn.clicked.connect(self.login)

运行测试没问题:

至此,用户登录功能模块功能实现完毕!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/50003
推荐阅读
相关标签
  

闽ICP备14008679号