PyQt5图书管理系统练习(3)登录界面实现

环境

系统:windows10系统
编辑器:PyCharm
编程语言:python3+pyqt5

前言

登录界面与注册界面类似,登录的时候依赖数据库操作的文件initDB.py。

登录页面逻辑

注册页面布局,首先一个Label标题,然后依次5行控件

帐       号:输入框

密       码: 输入框

  登录       重置

 

登录逻辑,在点登录的时候,检查学号是否规范,密码是否合理,不合理的会给出相应的提示,如果都合理则查询数据库,检查当前帐号和密码是否匹配数据库的帐号和密码,匹配成功,提示登录成功,否则提示失败。

下面是源代码SignIn.py

""""
brief:注册
date:2020-09-10
author:chenyijun
version: python V3.8.1 pyqt5 V5.14.0
"""

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import qdarkstyle
import hashlib
from PyQt5.QtSql import *
from initDB import UserDbManager #从initDB.py文件中导入UserDbManager类
import images


class SignInWidget(QWidget):
    is_admin_signal = pyqtSignal()
    is_student_signal = pyqtSignal(str)

    def __init__(self):
        super().__init__()
        self.resize(900, 600)
        self.setWindowTitle("欢迎使用图书馆管理系统")
        self.setUpUI()
        self.userdb = UserDbManager()

    def setUpUI(self):
        self.Vlayout = QVBoxLayout(self)
        self.HlayoutTitle = QHBoxLayout()   #标题
        self.HlayoutWidgetForm = QHBoxLayout()
        self.formlayout = QFormLayout()

        self.labelAccount = QLabel("帐  号:")
        labelFont = QFont()
        labelFont.setPixelSize(18)
        lineEditFont = QFont()
        lineEditFont.setPixelSize(16)
        self.labelAccount.setFont(labelFont)
        self.lineEditAccount = QLineEdit()
        self.lineEditAccount.setFixedHeight(32)
        self.lineEditAccount.setFixedWidth(180)
        self.lineEditAccount.setFont(lineEditFont)
        self.lineEditAccount.setMaxLength(10)

        self.formlayout.addRow(self.labelAccount, self.lineEditAccount)

        self.labelPassword = QLabel("密  码:")
        self.labelPassword.setFont(labelFont)
        self.lineEditPassword = QLineEdit()
        self.lineEditPassword.setFixedHeight(32)
        self.lineEditPassword.setFixedWidth(180)
        self.lineEditPassword.setMaxLength(16)

        # 设置验证
        reg = QRegExp("PB[0~9]{8}")
        pValidator = QRegExpValidator(self)
        pValidator.setRegExp(reg)
        self.lineEditAccount.setValidator(pValidator)

        reg = QRegExp("[a-zA-z0-9]+$")
        pValidator.setRegExp(reg)
        self.lineEditPassword.setValidator(pValidator)

        passwordFont = QFont()
        passwordFont.setPixelSize(16)
        self.lineEditPassword.setFont(passwordFont)

        self.lineEditPassword.setEchoMode(QLineEdit.Password)  # 输入后就显示为星号
        self.lineEditPassword.setEchoMode(QLineEdit.PasswordEchoOnEdit)  # 输入时为字符,失去焦点为星号
        self.formlayout.addRow(self.labelPassword, self.lineEditPassword)

        self.signIn = QPushButton("登 录")
        self.signIn.setFixedWidth(70)
        self.signIn.setFixedHeight(30)
        self.signIn.setFont(labelFont)

        self.signCancle = QPushButton("重 置")
        self.signCancle.setFixedWidth(70)
        self.signCancle.setFixedHeight(30)
        self.signCancle.setFont(labelFont)
        self.signCancle.setStyleSheet('background-color: #505F69;border: 1px solid #32414B;color: #F0F0F0;border-radius: 4px;padding: 3px;outline: none;')

        self.testlayout = QHBoxLayout()
        self.testlayout.addWidget(self.signIn)
        self.testlayout.addWidget(self.signCancle)
        self.testwidget = QWidget()
        self.testwidget.setLayout(self.testlayout)      #包含登录,取消两个按钮
        self.formlayout.addRow('', self.testwidget)     #把testwidget加入到formlayout
        #formlayout 两个label, 两个LineEdit,两个按钮

        self.labelTitle = QLabel("欢迎使用图书馆管理系统")
        fontlabel = QFont()
        fontlabel.setPixelSize(30)
        self.labelTitle.setFixedWidth(390)
        # pixmap=QPixmap('index.jpg').scaled(self.labelTitle.width(), self.labelTitle.height())
        # self.labelTitle.setPixmap(pixmap)
        # self.labelTitle.setStyleSheet("QLabel{background-image:url(index.jpg)}")
        # self.labelTitle.setFixedHeight(80)                                            #不设置宽度了
        self.labelTitle.setFont(fontlabel)
        self.HlayoutTitle.addWidget(self.labelTitle, Qt.AlignCenter)                    #标题
        self.widgetTitle = QWidget()
        self.widgetTitle.setLayout(self.HlayoutTitle)                                   #标题
        self.widgetForm = QWidget()
        self.widgetForm.setFixedWidth(300)
        self.widgetForm.setFixedHeight(150)
        self.widgetForm.setLayout(self.formlayout)
        self.widgetForm.setStyleSheet(".QWidget{border-image:url(./images/baise.png)}")  #设置widgets背景色
        #widgetForm上存放6个控件

        self.HlayoutWidgetForm.addWidget(self.widgetForm, Qt.AlignCenter)
        self.widget = QWidget()
        self.widget.setLayout(self.HlayoutWidgetForm)

        # background-image,当背景图片宽度高度小于窗口的宽度高度时,则会加载多个背景图片
        # background-image,当背景图片的宽度高度大于窗口的宽度高度时,背景图片会平铺整个背景
        # self.widget1.setStyleSheet("QWidget{background-image:url(index.jpg);}")       #设置背景图片
        self.widget.setStyleSheet(".QWidget{border-image:url(./images/lasa.jpg)}")      #加.号表示只对当前控件有效,否则对子控件也有效
        self.widgetTitle.setStyleSheet("color:green")                                   #设置字体颜色
        #self.widgetTitle.setStyleSheet("color:red; background:yellow")                 #设置字体颜色和背景颜色
        self.Vlayout.addWidget(self.widgetTitle)                                        #Vlayout层包含两个Widget垂直布局
        self.Vlayout.addWidget(self.widget, Qt.AlignTop)
        #self.Vlayout.addWidget(self.widgetForm, Qt.AlignTop)

        self.signIn.clicked.connect(self.signInCheck)
        self.signCancle.clicked.connect(self.signInCancleReset)
        self.lineEditPassword.returnPressed.connect(self.signInCheck)
        self.lineEditAccount.returnPressed.connect(self.signInCheck)

    def signInCancleReset(self):
        self.lineEditAccount.clear()
        self.lineEditPassword.clear()

    def signInCheck(self):
        studentId = self.lineEditAccount.text()
        password = self.lineEditPassword.text()
        if (studentId == "" or password == ""):
            print(QMessageBox.warning(self, "警告", "学号和密码不可为空!", QMessageBox.Yes, QMessageBox.Yes))
            return

        hl = hashlib.md5()  # md5加密对象
        hl.update(password.encode(encoding='utf-8'))  # 将密码更新为MD5加密对象

        userdata = self.userdb.querybyUserid(studentId)
        print(userdata)
        if (not userdata):
            # QMessageBox.information()返回值是一个整形变量,是点击按钮所代表的值
            # QMessageBox.Yes       =   16384
            # QMessageBox.No        =   65536
            # QMessageBox.Close     =   2097152
            # QMessageBox.Abort     =   262144
            # QMessageBox.Help     =   16777216
            print(QMessageBox.information(self, "提示", "该账号不存在,请重新输入!", QMessageBox.Yes))
            self.signInCancleReset()
        else:
            # 将输入的密码经过MD5加密之后,重新跟数据库中的值对比
            print(userdata[0][0])
            print(userdata[0][1])
            print(userdata[0][2])
            print(userdata[0][3])
            print(userdata[0][4])
            if (studentId == userdata[0][0] and hl.hexdigest() == userdata[0][2]):
                # 如果是管理员, 再在数据库中,第三项代表是否是管理员,1为管理员,0不是
                if (userdata[0][3] == 1):
                    self.is_admin_signal.emit()
                    print('admin login success')
                    QMessageBox.information(self, "提示", studentId + " 管理员登录成功", QMessageBox.Yes, QMessageBox.Yes)
                else:
                    self.is_student_signal.emit(studentId)
                    print(studentId + ' login success')
                    QMessageBox.information(self, "提示", studentId + " 登录成功", QMessageBox.Yes, QMessageBox.Yes)
            else:
                print(QMessageBox.information(self, "提示", "密码错误!", QMessageBox.Yes, QMessageBox.Yes))
        return


if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon(":/images/MainWindow_1.png"))
    #app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())

    mainMindow = SignInWidget()
    mainMindow.show()
    sys.exit(app.exec_())

运行效果

 

参考:

https://blog.csdn.net/luchengbiao/article/details/85340090
https://blog.csdn.net/qiqiyingse/article/details/87976378
https://blog.csdn.net/weixin_38312031/article/details/80037716

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值