赞
踩
锋哥原创的PyQt6图书管理系统视频教程:
PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计21条视频,包括:PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~、第2讲 登录功能UI设计实现、第3讲 数据库操作工具包dbUtil.py封装等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV18t4y1R7Qp/我们在项目目录下,新建login.py文件,作为管理员登录模块源码文件,把前面登录UI文件用PyUIC生成的python文件,贴到当前login.py里面,我们要进行二次开发。
为了让源码能运行起来,我们把继承的类改成QWidget;
再加一个 构造方法;
- 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", "图书管理系统"))
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
我们写个main测试方法:
- if __name__ == '__main__':
- app = QApplication(sys.argv)
-
- ui = Ui_Form()
- ui.show()
-
- sys.exit(app.exec())
能运行出来,但是么有logo和icon图片。这个是引用图片的路径问题引起的。我们改下。
ctrl+R快捷键:把所有的'../'替换成'./',即可。
这样图标就出来了。
我们先实现简单的重置功能
先定义槽函数resetForm:
- def resetForm(self):
- """
- 重置表单
- :return:
- """
- self.userNameInput.setText("")
- self.passwordInput.setText("")
重置按钮点击事件绑定下槽函数
- # 重置按钮点击事件
- self.resetBtn.clicked.connect(self.resetForm)
我们再来实现点击登录按钮,实现登录判断功能。
我们采用的是面向对象设计思想,所以我们基于MVC实现,Controller控制层向Dao数据库访问层,传递数据的时候,采用对象传递,我们这里设计到用户对象,我们先来建一个用户实体对象。
单独建一个entity目录用来放项目实体文件。建一个UserModel.py
里面再建一个User实体类。
- """
- 用户实体类
- 作者 : 小锋老师
- 官网 : www.python222.com
- """
-
-
- # 用户实体类
- class User:
- # 编号 主键ID
- id = None
- # 用户名
- userName = None
- # 密码
- password = None
-
- def __init__(self, userName, password):
- self.userName = userName
- self.password = password
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
我们再单独建一个dao包目录,用来放所有的数据访问对象代码:
在dao下新建userDao.py,用户模块操作数据的代码文件
在userDao.py里,定义login方法,用来判断用户登录
- """
- 用户数据访问对象
- 作者 : 小锋老师
- 官网 : 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)
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
我们在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, '系统提示', '用户名或者密码输入错误!')
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
登录按钮点击事件绑定下槽函数:
- # 登录按钮点击事件
- self.loginBtn.clicked.connect(self.login)
运行测试没问题:
至此,用户登录功能模块功能实现完毕!
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。