PyQt5 building library management system (3) -- Design of login page
Analysis
The logic of the login page is simple, as follows:
-User input student number and password (for security, plus input detection)
-Prompt if the password is wrong or the user name does not exist
-If correct, jump
Code:
The validator for input detection and jump logic are not added temporarily
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon, QFont
from PyQt5.QtCore import Qt
import qdarkstyle
import hashlib
from PyQt5.QtSql import *
class SignInWidget(QWidget):
def __init__(self):
super(SignInWidget, self).__init__()
self.resize(900, 600)
self.setWindowTitle("Welcome to the library management system")
self.setUpUI()
def setUpUI(self):
self.Vlayout = QVBoxLayout(self)
self.Hlayout1 = QHBoxLayout()
self.Hlayout2 = QHBoxLayout()
self.formlayout = QFormLayout()
self.label1 = QLabel("Student ID: ")
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("Password: ")
self.label2.setFont(labelFont)
self.lineEdit2 = QLineEdit()
self.lineEdit2.setFixedHeight(32)
self.lineEdit2.setFixedWidth(180)
self.lineEdit2.setMaxLength(16)
passwordFont = QFont()
passwordFont.setPixelSize(10)
self.lineEdit2.setFont(passwordFont)
self.lineEdit2.setEchoMode(QLineEdit.Password)
self.formlayout.addRow(self.label2, self.lineEdit2)
self.signIn = QPushButton("Land")
self.signIn.setFixedWidth(80)
self.signIn.setFixedHeight(30)
self.signIn.setFont(labelFont)
self.formlayout.addRow("", self.signIn)
self.label = QLabel("Welcome to use USTC Library management system")
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)
def signInCheck(self):
studentId = self.lineEdit1.text()
password = self.lineEdit2.text()
if (studentId == "" or password == ""):
print(QMessageBox.warning(self, "warning", "Student ID and password cannot be empty!", QMessageBox.Yes, QMessageBox.Yes))
return
# Open database connection
db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName('./db/LibraryManagement.db')
db.open()
query = QSqlQuery()
sql = "SELECT * FROM user WHERE user.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, "Tips", "The account does not exist!", QMessageBox.Yes, QMessageBox.Yes))
else:
if (studentId == query.value(0) and hl.hexdigest() == query.value(2)):
print("Correct")
else:
print(QMessageBox.information(self, "Tips", "Password error!", 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_())