手把手教你开发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里面,我们要进行二次开发。

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

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

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

再加一个 构造方法;

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

初步改成的代码如下:

"""
    管理员登录模块
    作者 : 小锋老师
    官网 : www.python222.com
"""
from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtWidgets import QWidget


class Ui_Form(QWidget):

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

    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(487, 405)
        self.formLayoutWidget = QtWidgets.QWidget(parent=Form)
        self.formLayoutWidget.setGeometry(QtCore.QRect(90, 120, 311, 121))
        self.formLayoutWidget.setObjectName("formLayoutWidget")
        self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
        self.formLayout.setContentsMargins(10, 10, 10, 10)
        self.formLayout.setHorizontalSpacing(40)
        self.formLayout.setVerticalSpacing(30)
        self.formLayout.setObjectName("formLayout")
        self.label = QtWidgets.QLabel(parent=self.formLayoutWidget)
        self.label.setObjectName("label")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label)
        self.userNameInput = QtWidgets.QLineEdit(parent=self.formLayoutWidget)
        self.userNameInput.setObjectName("userNameInput")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.userNameInput)
        self.label_2 = QtWidgets.QLabel(parent=self.formLayoutWidget)
        self.label_2.setObjectName("label_2")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_2)
        self.passwordInput = QtWidgets.QLineEdit(parent=self.formLayoutWidget)
        self.passwordInput.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
        self.passwordInput.setObjectName("passwordInput")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.passwordInput)
        self.loginBtn = QtWidgets.QPushButton(parent=Form)
        self.loginBtn.setGeometry(QtCore.QRect(110, 260, 75, 23))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("../images/login.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.loginBtn.setIcon(icon)
        self.loginBtn.setObjectName("loginBtn")
        self.resetBtn = QtWidgets.QPushButton(parent=Form)
        self.resetBtn.setGeometry(QtCore.QRect(290, 260, 75, 23))
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("../images/reset.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.resetBtn.setIcon(icon1)
        self.resetBtn.setObjectName("resetBtn")
        self.label_3 = QtWidgets.QLabel(parent=Form)
        self.label_3.setGeometry(QtCore.QRect(180, 40, 241, 61))
        font = QtGui.QFont()
        font.setPointSize(24)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(parent=Form)
        self.label_4.setGeometry(QtCore.QRect(100, 40, 71, 61))
        self.label_4.setText("")
        self.label_4.setPixmap(QtGui.QPixmap("../images/logo.png"))
        self.label_4.setObjectName("label_4")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "管理员登录"))
        self.label.setText(_translate("Form", "用户名:"))
        self.label_2.setText(_translate("Form", "密    码:"))
        self.loginBtn.setText(_translate("Form", "登录"))
        self.resetBtn.setText(_translate("Form", "重置"))
        self.label_3.setText(_translate("Form", "图书管理系统"))

我们写个main测试方法:

if __name__ == '__main__':
    app = QApplication(sys.argv)

    ui = Ui_Form()
    ui.show()

    sys.exit(app.exec())

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

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

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

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

这样图标就出来了。

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

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

先定义槽函数resetForm:

    def resetForm(self):
        """
        重置表单
        :return: 
        """
        self.userNameInput.setText("")
        self.passwordInput.setText("")

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

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

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

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

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

里面再建一个User实体类。

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

"""
    用户实体类
    作者 : 小锋老师
    官网 : www.python222.com
"""


# 用户实体类
class User:
    # 编号 主键ID
    id = None
    # 用户名
    userName = None
    # 密码
    password = None

    def __init__(self, userName, password):
        self.userName = userName
        self.password = password

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

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

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

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

"""
    用户数据访问对象
    作者 : 小锋老师
    官网 : www.python222.com
"""
from entity.UserModel import User
from util import dbUtil


def login(user: User):
    """
    用户登录判断
    :param user:用户实体
    :return:登录成功返回用户信息实体,登录失败,返回None
    """
    con = None
    try:
        con = dbUtil.getCon()
        cursor = con.cursor()
        cursor.execute(f"select * from t_user where userName='{user.userName}' and password='{user.password}'")
        return cursor.fetchone()
    except Exception as e:
        print(e)
        con.rollback()
        return None
    finally:
        dbUtil.closeCon(con)

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

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

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

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

运行测试没问题:

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

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

你可能感兴趣的:(Python,python,pyqt,pyqt6,python桌面开发,pyqt实战,pyqt6实战)