乐之之

知而行乐,乐而行之,天道酬勤,学无止境。
pyqt5图书管理系统--1、注册页面设计

环境配置

镜像源:

一、类设置

class SignUpWidet(QWidget):
    student_signup_signal = pyqtSignal(str)
    def __init__(self):
        super().__init__()
        self.setUpUI()
    def setUpUI(self):

二、创建窗口部件

(一)设置页面布局

def setUpUI(self):
    self.resize(800,600)
    self.setWindowTitle("欢迎登录图书管理系统")
    # 文本
    self.signUPLabel = QLabel("注 册")
    # 把QLabel居中
    self.signUPLabel.setAlignment(Qt.AlignCenter)
    # 设置位置
    self.signUPLabel.setFixedHeight(100)
    # 设置字体
    font  = QFont()
    font.setPixelSize(36)
    lineEditFont = QFont()
    lineEditFont.setPixelSize(16)
    self.signUPLabel.setFont(font)
    # 垂直布局
    self.layout = QVBoxLayout()
    self.layout.addWidget(self.signUPLabel, Qt.AlignCenter)
    self.setLayout(self.layout)
​
    # 表单:包括学号、姓名、密码、确认密码
    self.formLayout = QFormLayout()
    font.setPixelSize(18)
    # rows 行 columns 列
    # rows1
    self.studentIDLable = QLabel("学 号:")
    # 设置学号字体
    self.studentIDLable.setFont(font)
    # 输入框
    self.studentIDLineEdit = QLineEdit()
    # 设置输入框的宽度
    self.studentIDLineEdit.setFixedWidth(180)
    # 设置输入框的高度
    self.studentIDLineEdit.setFixedHeight(32)
    # 设置输入框的字体
    self.studentIDLineEdit.setFont(lineEditFont)
    # 限制输入字数
    self.studentIDLineEdit.setMaxLength(10)
    # 添加字体标签和输入框标签
    self.formLayout.addRow(self.studentIDLable,self.studentIDLineEdit)
​
​
    # rows2
    self.studentNameLable = QLabel("姓 名:")
    # 设置学号字体
    self.studentNameLable.setFont(font)
    # 输入框
    self.studentNameLineEdit = QLineEdit()
    # 设置输入框的宽度
    self.studentNameLineEdit.setFixedWidth(180)
    # 设置输入框的高度
    self.studentNameLineEdit.setFixedHeight(32)
    # 设置输入框的字体
    self.studentNameLineEdit.setFont(lineEditFont)
    # 限制输入字数
    self.studentNameLineEdit.setMaxLength(10)
    # 添加字体标签和输入框标签
    self.formLayout.addRow(self.studentNameLable,self.studentNameLineEdit)
​
    # rows3
    self.passwordLable = QLabel("密 码:")
    # 设置学号字体
    self.passwordLable.setFont(font)
    # 输入框
    self.passwordLineEdit = QLineEdit()
    # 设置输入框的宽度
    self.passwordLineEdit.setFixedWidth(180)
    # 设置输入框的高度
    self.passwordLineEdit.setFixedHeight(32)
    # 设置输入框的字体
    self.passwordLineEdit.setFont(lineEditFont)
    # 限制输入字数
    self.passwordLineEdit.setMaxLength(10)
    # 添加字体标签和输入框标签
    self.formLayout.addRow(self.passwordLable,self.passwordLineEdit)
​
    # rows4
    self.passwordConfirmLable = QLabel("确 认:")
    # 设置学号字体
    self.passwordConfirmLable.setFont(font)
    # 输入框
    self.passwordConfirmLineEdit = QLineEdit()
    # 设置输入框的宽度
    self.passwordConfirmLineEdit.setFixedWidth(180)
    # 设置输入框的高度
    self.passwordConfirmLineEdit.setFixedHeight(32)
    # 设置输入框的字体
    self.passwordConfirmLineEdit.setFont(lineEditFont)
    # 限制输入字数
    self.passwordConfirmLineEdit.setMaxLength(10)
    # 添加字体标签和输入框标签
    self.formLayout.addRow(self.passwordConfirmLable,self.passwordConfirmLineEdit)
​
    # row5
    self.signUPbutton = QPushButton("注册")
    self.signUPbutton.setFixedWidth(120)
    self.signUPbutton.setFixedHeight(30)
    self.signUPbutton.setFont(font)
    self.formLayout.addRow("",self.signUPbutton)

(二)设置表单布局

# 调整表单布局
widget = QWidget()
widget.setLayout(self.formLayout)
widget.setFixedWidth(300)
widget.setFixedHeight(250)
​
# 从左往右布局
self.Hlayout = QHBoxLayout()
# 居中
self.Hlayout.addWidget(widget,Qt.AlignCenter)
​
widget = QWidget()
widget.setLayout(self.Hlayout)
self.layout.addWidget(widget,Qt.AlignHCenter)

三、注册函数

  • 接上def setUpUI(self):

(一)设置验证,进行匹配密码

# 用正则区分   PB[0~9]匹配0~9的数字,{8}只能匹配8个
reg = QRegExp("PB[0~9]{8}")

(二)调用并绑定

1、调用

# 指向调用对象   QRegExpValidator 根据正则表达式检测字符串
pValidator = QRegExpValidator(self)
# 设置调用
pValidator.setRegExp(reg)

2、绑定

# 绑定
self.studentIDLineEdit.setValidator(pValidator)
​
reg = QRegExp("[a-zA-Z0-9]+$")
pValidator.setRegExp(reg)
self.passwordLineEdit.setValidator(pValidator)

(三)设置连接触发事件(发出信号)

# 设置连接,触发事件
self.signUPbutton.clicked.connect(self.SignUp)
# 发出信号
self.studentIDLineEdit.returnPressed.connect(self.SignUp)
self.studentNameLineEdit.returnPressed.connect(self.SignUp)
self.passwordLineEdit.returnPressed.connect(self.SignUp)
self.passwordConfirmLineEdit.returnPressed.connect(self.SignUp)

(四)接受信号

  • 调用新函数,接受触发的事件进行处理。

1、接受输入框内容

def SignUp(self):
    # 触发事件后用于接受输入框内字符串
    studentID = self.studentIDLineEdit.text()
    # print(studentID)
    studentName = self.studentNameLineEdit.text()
    password = self.passwordLineEdit.text()
    confirmPassword = self.passwordConfirmLineEdit.text()

2、逻辑判定输入框的事件

  • 弹出消息提示框
if (studentID == "" or studentName == "" or password == "" or confirmPassword == ""):
    print(QMessageBox.warning(self,"警告","输入内容不能为空。",QMessageBox.Yes,QMessageBox.Yes))
​
    return

(五)逻辑处理

1、打开数据库

else:
    # 进行逻辑处理
    # 打开指定的数据库
    db = QSqlDatabase.addDatabase("QSQLITE")  # QSQLITE sqlite专有的数据库
    db.setDatabaseName("./db/LibraryManagement.db")
    db.open()
    query = QSqlQuery() # Q版的sql语句查询函数

2、逻辑判断

(1)若输入框为空进行消息框提醒,若不为空执行以下语句。

if (studentID == "" or studentName == "" or password == "" or confirmPassword == ""):
    print(QMessageBox.warning(self,"警告","输入内容不能为空。",QMessageBox.Yes,QMessageBox.Yes))
    return

(2)判断两次密码是否相等:

不相等,提醒,返回函数
if (confirmPassword != password):
    print(QMessageBox.warning(self, "警告","两次密码输入的不一致,请重新输入",QMessageBox.Yes,QMessageBox.Yes))
    return
相等,密码加密存入数据库,判断账号是否存在:
elif (confirmPassword == password):
    # md5编码
    h1 = hashlib.md5()
    h1.update(password.encode(encoding="utf-8"))
    md5password = h1.hexdigest()
    sql = "select * from user where StudentId='%s'"%(studentID)
    query.exec_(sql)
    if (query.next()):

存在:提醒,返回函数

if (query.next()):
    print(QMessageBox.warning(self,"警告","该账号已经存在,请重新输入",QMessageBox.Yes,QMessageBox.Yes))
    return

不存在:存入数据库,注册成功提醒!

else:
    sql = "insert into user values ('%s', '%s', '%s', 0,0,0)"%(studentID,studentName,md5password)
    db.exec_(sql)
    db.commit()
    print(QMessageBox.information(self,"提醒","您已成功注册账号",QMessageBox.Yes,QMessageBox.Yes))
    self.student_signup_signal.emit(studentID)
db.close()
return

四、程序入口运行

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    m = SignUpWidet()
    m.show()
    sys.exit(app.exec_())

五、完整代码

import sys
from PyQt5.QtWidgets import *
import qdarkstyle
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtSql import *
import hashlib
from PyQt5.QtWidgets import QMessageBox
class SignUpWidet(QWidget):
    student_signup_signal = pyqtSignal(str)
    def __init__(self):
        super().__init__()
        self.setUpUI()
​
    def setUpUI(self):
        self.resize(800,600)
        self.setWindowTitle("欢迎登录图书管理系统")
        # 文本
        self.signUPLabel = QLabel("注 册")
        # 把QLabel居中
        self.signUPLabel.setAlignment(Qt.AlignCenter)
        # 设置位置
        self.signUPLabel.setFixedHeight(100)
        # 设置字体
        font  = QFont()
        font.setPixelSize(36)
        lineEditFont = QFont()
        lineEditFont.setPixelSize(16)
        self.signUPLabel.setFont(font)
        # 垂直布局
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.signUPLabel, Qt.AlignCenter)
        self.setLayout(self.layout)
​
        # 表单:包括学号、姓名、密码、确认密码
        self.formLayout = QFormLayout()
        font.setPixelSize(18)
        # rows 行 columns 列
        # rows1
        self.studentIDLable = QLabel("学 号:")
        # 设置学号字体
        self.studentIDLable.setFont(font)
        # 输入框
        self.studentIDLineEdit = QLineEdit()
        # 设置输入框的宽度
        self.studentIDLineEdit.setFixedWidth(180)
        # 设置输入框的高度
        self.studentIDLineEdit.setFixedHeight(32)
        # 设置输入框的字体
        self.studentIDLineEdit.setFont(lineEditFont)
        # 限制输入字数
        self.studentIDLineEdit.setMaxLength(10)
        # 添加字体标签和输入框标签
        self.formLayout.addRow(self.studentIDLable,self.studentIDLineEdit)
​
​
        # rows2
        self.studentNameLable = QLabel("姓 名:")
        # 设置学号字体
        self.studentNameLable.setFont(font)
        # 输入框
        self.studentNameLineEdit = QLineEdit()
        # 设置输入框的宽度
        self.studentNameLineEdit.setFixedWidth(180)
        # 设置输入框的高度
        self.studentNameLineEdit.setFixedHeight(32)
        # 设置输入框的字体
        self.studentNameLineEdit.setFont(lineEditFont)
        # 限制输入字数
        self.studentNameLineEdit.setMaxLength(10)
        # 添加字体标签和输入框标签
        self.formLayout.addRow(self.studentNameLable,self.studentNameLineEdit)
​
        # rows3
        self.passwordLable = QLabel("密 码:")
        # 设置学号字体
        self.passwordLable.setFont(font)
        # 输入框
        self.passwordLineEdit = QLineEdit()
        # 设置输入框的宽度
        self.passwordLineEdit.setFixedWidth(180)
        # 设置输入框的高度
        self.passwordLineEdit.setFixedHeight(32)
        # 设置输入框的字体
        self.passwordLineEdit.setFont(lineEditFont)
        # 限制输入字数
        self.passwordLineEdit.setMaxLength(10)
        # 添加字体标签和输入框标签
        self.formLayout.addRow(self.passwordLable,self.passwordLineEdit)
​
        # rows4
        self.passwordConfirmLable = QLabel("确 认:")
        # 设置学号字体
        self.passwordConfirmLable.setFont(font)
        # 输入框
        self.passwordConfirmLineEdit = QLineEdit()
        # 设置输入框的宽度
        self.passwordConfirmLineEdit.setFixedWidth(180)
        # 设置输入框的高度
        self.passwordConfirmLineEdit.setFixedHeight(32)
        # 设置输入框的字体
        self.passwordConfirmLineEdit.setFont(lineEditFont)
        # 限制输入字数
        self.passwordConfirmLineEdit.setMaxLength(10)
        # 添加字体标签和输入框标签
        self.formLayout.addRow(self.passwordConfirmLable,self.passwordConfirmLineEdit)
​
        # row5
        self.signUPbutton = QPushButton("注册")
        self.signUPbutton.setFixedWidth(120)
        self.signUPbutton.setFixedHeight(30)
        self.signUPbutton.setFont(font)
        self.formLayout.addRow("",self.signUPbutton)
​
        # 调整表单布局
        widget = QWidget()
        widget.setLayout(self.formLayout)
        widget.setFixedWidth(300)
        widget.setFixedHeight(250)
​
        # 从左往右布局
        self.Hlayout = QHBoxLayout()
        # 居中
        self.Hlayout.addWidget(widget,Qt.AlignCenter)
​
        widget = QWidget()
        widget.setLayout(self.Hlayout)
        self.layout.addWidget(widget,Qt.AlignHCenter)
​
        # 设置验证,密码匹配
        # 用正则传   PB[0~9]匹配0~9的数字,{8}只能匹配8个
        reg = QRegExp("PB[0~9]{8}")
        # 指向调用对象   QRegExpValidator 根据正则表达式检测字符串
        pValidator = QRegExpValidator(self)
        # 设置调用
        pValidator.setRegExp(reg)
        # 绑定
        self.studentIDLineEdit.setValidator(pValidator)
​
        reg = QRegExp("[a-zA-Z0-9]+$")
        pValidator.setRegExp(reg)
        self.passwordLineEdit.setValidator(pValidator)
        # 设置连接,触发事件
        self.signUPbutton.clicked.connect(self.SignUp)
        # 发出信号
        self.studentIDLineEdit.returnPressed.connect(self.SignUp)
        self.studentNameLineEdit.returnPressed.connect(self.SignUp)
        self.passwordLineEdit.returnPressed.connect(self.SignUp)
        self.passwordConfirmLineEdit.returnPressed.connect(self.SignUp)
    def SignUp(self):
        # 触发事件后用于接受输入框内字符串
        studentID = self.studentIDLineEdit.text()
        # print(studentID)
        studentName = self.studentNameLineEdit.text()
        password = self.passwordLineEdit.text()
        confirmPassword = self.passwordConfirmLineEdit.text()
        if (studentID == "" or studentName == "" or password == "" or confirmPassword == ""):
            print(QMessageBox.warning(self,"警告","输入内容不能为空。",QMessageBox.Yes,QMessageBox.Yes))
            return
        else:
            # 进行逻辑处理
            # 打开指定的数据库
            db = QSqlDatabase.addDatabase("QSQLITE")  # QSQLITE sqlite专有的数据库
            db.setDatabaseName("./db/LibraryManagement.db")
            db.open()
            query = QSqlQuery() # Q版的sql语句查询函数
            if (confirmPassword != password):
                print(QMessageBox.warning(self, "警告","两次密码输入的不一致,请重新输入",QMessageBox.Yes,QMessageBox.Yes))
​
                return
            elif (confirmPassword == password):
                # md5编码
                h1 = hashlib.md5()
                h1.update(password.encode(encoding="utf-8"))
                md5password = h1.hexdigest()
                sql = "select * from user where StudentId='%s'"%(studentID)
                query.exec_(sql)
                if (query.next()):
                    print(QMessageBox.warning(self,"警告","该账号已经存在,请重新输入",QMessageBox.Yes,QMessageBox.Yes))
                    return
                else:
                    sql = "insert into user values ('%s', '%s', '%s', 0,0,0)"%(studentID,studentName,md5password)
                    db.exec_(sql)
                    db.commit()
                    print(QMessageBox.information(self,"提醒","您已成功注册账号",QMessageBox.Yes,QMessageBox.Yes))
                    self.student_signup_signal.emit(studentID)
                db.close()
                return
if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    m = SignUpWidet()
    m.show()
    sys.exit(app.exec_())

待后续...

posted on 2022-12-04 23:11  乐之之  阅读(162)  评论(0编辑  收藏  举报