PyQt5搭建图书馆管理系统(3)——登录页面设计

分析#

登录页面的逻辑很简单,如下:

  • 用户输入学号和密码(安全起见,加上输入检测)
  • 如果密码错误或者用户名不存在,则给出提示
  • 如果正确,则进行跳转

代码:#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import qdarkstyle
import hashlib
from PyQt5.QtSql import *


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

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

def setUpUI(self):
self.Vlayout = QVBoxLayout(self)
self.Hlayout1 = QHBoxLayout()
self.Hlayout2 = QHBoxLayout()
self.formlayout = QFormLayout()

self.label1 = QLabel("学号: ")
labelFont = QFont()
labelFont.setPixelSize(18)
lineEditFont = QFont()
lineEditFont.setPixelSize(16)
self.label1.setFont(labelFont)
self.lineEdit1 = QLineEdit()
self.lineEdit1.setFixedHeight(32)
self.lineEdit1.setFixedWidth(180)
self.lineEdit1.setFont(lineEditFont)
self.lineEdit1.setMaxLength(10)

self.formlayout.addRow(self.label1, self.lineEdit1)

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

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

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

passwordFont = QFont()
passwordFont.setPixelSize(10)
self.lineEdit2.setFont(passwordFont)

self.lineEdit2.setEchoMode(QLineEdit.Password)
self.formlayout.addRow(self.label2, self.lineEdit2)
self.signIn = QPushButton("登 录")
self.signIn.setFixedWidth(80)
self.signIn.setFixedHeight(30)
self.signIn.setFont(labelFont)
self.formlayout.addRow("", self.signIn)

self.label = QLabel("欢迎使用图书馆管理系统")
fontlabel = QFont()
fontlabel.setPixelSize(30)
self.label.setFixedWidth(390)
# self.label.setFixedHeight(80)
self.label.setFont(fontlabel)
self.Hlayout1.addWidget(self.label, Qt.AlignCenter)
self.widget1 = QWidget()
self.widget1.setLayout(self.Hlayout1)
self.widget2 = QWidget()
self.widget2.setFixedWidth(300)
self.widget2.setFixedHeight(150)
self.widget2.setLayout(self.formlayout)
self.Hlayout2.addWidget(self.widget2, Qt.AlignCenter)
self.widget = QWidget()
self.widget.setLayout(self.Hlayout2)
self.Vlayout.addWidget(self.widget1)
self.Vlayout.addWidget(self.widget, Qt.AlignTop)

self.signIn.clicked.connect(self.signInCheck)
self.lineEdit2.returnPressed.connect(self.signInCheck)
self.lineEdit1.returnPressed.connect(self.signInCheck)

def signInCheck(self):
studentId = self.lineEdit1.text()
password = self.lineEdit2.text()
if (studentId == "" or password == ""):
print(QMessageBox.warning(self, "警告", "学号和密码不可为空!", QMessageBox.Yes, QMessageBox.Yes))
return
# 打开数据库连接
db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName('./db/LibraryManagement.db')
db.open()
query = QSqlQuery()
sql = "SELECT * FROM user WHERE StudentId='%s'" % (studentId)
query.exec_(sql)
db.close()

hl = hashlib.md5()
hl.update(password.encode(encoding='utf-8'))
if (not query.next()):
print(QMessageBox.information(self, "提示", "该账号不存在!", QMessageBox.Yes, QMessageBox.Yes))
else:
if (studentId == query.value(0) and hl.hexdigest() == query.value(2)):
# 如果是管理员
if (query.value(3)==1):
self.is_admin_signal.emit()
else:
self.is_student_signal.emit(studentId)
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_())

效果如下#

这里写图片描述
这里写图片描述
这里写图片描述

最后附上链接#

项目地址:github仓库链接

评论