首页 > 其他分享 >pyqt5图书管理系统--8、学生页面设计、借阅状态页面设计和所有书籍页面设计

pyqt5图书管理系统--8、学生页面设计、借阅状态页面设计和所有书籍页面设计

时间:2022-12-20 13:34:26浏览次数:59  
标签:Qt -- self 归还 设计 借阅 书籍 页面

本节分为三个部分:学生页面、借阅状态页面和所有书籍查询页面。

主要流程:1、学生用户主界面,可以使用借阅书籍、归还书籍、查看借阅状态、查看所有书籍信息。

     2、学生借阅状态页面,可以查看已经借阅的书籍,和已归还的书籍信息。

       3、整合所有学生页面的模块,进入学生页面后显示所有书籍查询界面及其他功能。

一、借阅状态页面

导入的模块:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt
import qdarkstyle
from PyQt5.QtSql import *

(一)类基础设置

  • 设置页面大小,调用主函数self.setUpUI()
class BorrowStatusViewer(QWidget):

    def __init__(self, StudentId):
        super(BorrowStatusViewer, self).__init__()
        self.resize(700, 500)
        self.studentId = StudentId
        self.setWindowTitle("欢迎使用图书管理系统")
        self.setUpUI()

(二)借阅状态页面布局

1、连接数据库

def setUpUI(self):
    self.db = QSqlDatabase.addDatabase("QSQLITE")
    self.db.setDatabaseName('./db/LibraryManagement.db')
    self.db.open()
    # 分为两块,上方是已借未归还,下方是已归还
    self.layout = QVBoxLayout(self)

2、设置未归还和已归还标签及大小

self.borrowedLabel = QLabel("未归还:")
self.returnedLabel = QLabel("已归还:")
self.borrowedLabel.setFixedHeight(32)
self.borrowedLabel.setFixedWidth(60)
self.returnedLabel.setFixedHeight(32)
self.returnedLabel.setFixedWidth(60)
font = QFont()
font.setPixelSize(18)
self.borrowedLabel.setFont(font)
self.returnedLabel.setFont(font)

3、设置未归还表格

  • 表格模型QTableView()
self.borrowedTableView = QTableView()
# 设置QT表格的宽度自适应 horizontalHeader() 宽度自适应内容宽度以及填充整个表格
self.borrowedTableView.horizontalHeader().setStretchLastSection(True)
# 自动填充
self.borrowedTableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
# 表格内容不能修改
self.borrowedTableView.setEditTriggers(QAbstractItemView.NoEditTriggers)
  • 在表格模型内设置数据库查询模型
  • 数据库查询模型QSqlQueryModel()
self.borrowedQueryModel = QSqlQueryModel()
self.borrowedTableView.setModel(self.borrowedQueryModel)
  • 调用未归还书籍查询函数
  • self.borrowedQuery()

def borrowedQuery(self):
    sql = "SELECT Book.BookName,Book.BookId,Auth,Category,Publisher,PublishTime,BorrowTime FROM Book,User_Book WHERE Book.BookId=User_Book.BookId AND User_Book.BorrowState=1 AND StudentId='%s'" % self.studentId
    self.borrowedQueryModel.setQuery(sql)
    return
  •  设置列标题
self.borrowedQueryModel.setHeaderData(0, Qt.Horizontal, "书名")
self.borrowedQueryModel.setHeaderData(1, Qt.Horizontal, "书号")
self.borrowedQueryModel.setHeaderData(2, Qt.Horizontal, "作者")
self.borrowedQueryModel.setHeaderData(3, Qt.Horizontal, "分类")
self.borrowedQueryModel.setHeaderData(4, Qt.Horizontal, "出版社")
self.borrowedQueryModel.setHeaderData(5, Qt.Horizontal, "出版时间")
self.borrowedQueryModel.setHeaderData(6, Qt.Horizontal, "借出时间")
  • 未归还页面效果

4、设置已归还表格

  • 表格模型QTableView()
self.returnedTableView = QTableView()
self.returnedTableView.horizontalHeader().setStretchLastSection(True)
self.returnedTableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.returnedTableView.setEditTriggers(QAbstractItemView.NoEditTriggers)
  • 在表格模型内设置数据库查询模型
  • 数据库查询模型QSqlQueryModel()
self.returnedQueryModel = QSqlQueryModel()
self.returnedTableView.setModel(self.returnedQueryModel)
  • 调用已归还书籍查询函数
  • self.returnedQuery()

def returnedQuery(self):
        sql = "SELECT Book.BookName,Book.BookId,Auth,Category,Publisher,PublishTime,BorrowTime FROM Book,User_Book WHERE Book.BookId=User_Book.BookId AND User_Book.BorrowState=0 AND StudentId='%s'" % self.studentId
        self.returnedQueryModel.setQuery(sql)
        return
  •  设置列标题
self.returnedQueryModel.setHeaderData(0, Qt.Horizontal, "书名")
self.returnedQueryModel.setHeaderData(1, Qt.Horizontal, "书号")
self.returnedQueryModel.setHeaderData(2, Qt.Horizontal, "作者")
self.returnedQueryModel.setHeaderData(3, Qt.Horizontal, "分类")
self.returnedQueryModel.setHeaderData(4, Qt.Horizontal, "出版社")
self.returnedQueryModel.setHeaderData(5, Qt.Horizontal, "出版时间")
self.returnedQueryModel.setHeaderData(6, Qt.Horizontal, "借阅时间")
self.returnedQueryModel.setHeaderData(7, Qt.Horizontal, "归还时间")
  • 已归还页面效果

 5、将标签和表格模型分别添加进垂直布局

# 未归还标签
self.layout.addWidget(self.borrowedLabel)
# 未归还表格模型
self.layout.addWidget(self.borrowedTableView)
# 已归还标签
self.layout.addWidget(self.returnedLabel)
# 已归还表格模型
self.layout.addWidget(self.returnedTableView)
return
  • 借阅状态整体页面效果 

(三)程序入口

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("iron-man.png"))
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    mainMindow = BorrowStatusViewer("PB15000135")
    mainMindow.show()
    sys.exit(app.exec_())

 二、所有书籍页面

此文档见:

pyqt5图书管理系统--7、管理员页面设计之所有书籍

三、学生界面设计

导入的模块:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon, QFont
from PyQt5 import sip
import qdarkstyle
from BookStorageViewer import BookStorageViewer
from returnBookDialog import returnBookDialog
from borrowBookDialog import borrowBookDialog
from BorrowStatusViewer import BorrowStatusViewer

 (一)类基础设置

  • 设置页面大小,调用主函数self.setUpUI()
class StudentHome(QWidget):
    def __init__(self, studentId):
        super(StudentHome, self).__init__()
        self.StudentId = studentId
        self.resize(900,600)
        self.setWindowTitle("欢迎使用图书管理系统")
        self.setUpUI()

 (二)学生页面总体布局

  • 总布局为水平布局 = 按钮的垂直布局 + 所有书籍查询界面的垂直布局
def setUpUI(self):
    # 总布局
    self.layout = QHBoxLayout(self)
    # 按钮布局
    self.buttonlayout = QVBoxLayout()

 1、设置按钮

  • 设置按钮标签
self.borrowBookButton = QPushButton("借书")
self.returnBookButton = QPushButton("还书")
self.myBookStatus = QPushButton("借阅状态")
self.allBookButton = QPushButton("所有书籍")
  •  添加按钮标签进按钮垂直布局
self.buttonlayout.addWidget(self.borrowBookButton)
self.buttonlayout.addWidget(self.returnBookButton)
self.buttonlayout.addWidget(self.myBookStatus)
self.buttonlayout.addWidget(self.allBookButton)
  •  设置按钮标签的字体大小
font = QFont()
font.setPixelSize(16)
self.borrowBookButton.setFont(font)
self.returnBookButton.setFont(font)
self.myBookStatus.setFont(font)
self.allBookButton.setFont(font)
  • 设置按钮标签的宽高
self.borrowBookButton.setFixedWidth(100)
self.borrowBookButton.setFixedHeight(42)
self.returnBookButton.setFixedHeight(42)
self.returnBookButton.setFixedWidth(100)
self.myBookStatus.setFixedWidth(100)
self.myBookStatus.setFixedHeight(42)
self.allBookButton.setFixedWidth(100)
self.allBookButton.setFixedHeight(42)

2、设置所有书籍查询界面布局

  • 实例化查询所有书籍模块
        self.storageView = BookStorageViewer()

 3、设置借阅状态页面

  • 实例化借阅状态模块
self.borrowStatusView = BorrowStatusViewer(self.StudentId)

 4、整体页面布局

  • 添加按钮垂直布局和所有书籍查询页面布局进入学生主页面
  • 默认所有书籍按钮不可点击
self.allBookButton.setEnabled(False)
self.layout.addLayout(self.buttonlayout)
self.layout.addWidget(self.storageView)

 (三)信号传递

self.borrowBookButton.clicked.connect(self.borrowBookBunttonClicked)
self.returnBookButton.clicked.connect(self.returnBookBunttonClicked)
self.myBookStatus.clicked.connect(self.myBookStatusClicked)
self.allBookButton.clicked.connect(self.allBookButtonClicked)

 1、信号一

  •  self.borrowBookButton.clicked.connect(self.borrowBookBunttonClicked)
  • 绑定连接借阅书籍按钮
  • 点击借阅书籍按钮可调用借阅书籍模块
def borrowBookBunttonClicked(self):
    borrowDialog = borrowBookDialog(self.StudentId)
    borrowDialog.borrow_book_success_signal.connect(self.borrowStatusView.borrowedQuery)
    borrowDialog.borrow_book_success_signal.connect(self.storageView.searchButtonClicked)
    borrowDialog.show()
    borrowDialog.exec_()

 2、信号二

  • self.returnBookButton.clicked.connect(self.returnBookBunttonClicked)
  • 绑定连接归还书籍按钮
  • 点击归还书籍按钮可调用归还书籍模块
def returnBookBunttonClicked(self):
        returnDialog = returnBookDialog(self.StudentId)
        returnDialog.return_book_success_signal.connect(self.borrowStatusView.returnedQuery)
        returnDialog.return_book_success_signal.connect(self.storageView.searchButtonClicked)
        returnDialog.show()
        returnDialog.exec_()

 3、信号三

  • self.myBookStatus.clicked.connect(self.myBookStatusClicked)
  • 绑定连接书籍借阅状态按钮
  • 点击借阅状态按钮可调用借阅状态模块,查看书籍借阅状态
def myBookStatusClicked(self):
        self.layout.removeWidget(self.storageView)
        sip.delete(self.storageView)
        self.storageView = BookStorageViewer()
        self.borrowStatusView = BorrowStatusViewer(self.StudentId)
        self.layout.addWidget(self.borrowStatusView)
        self.allBookButton.setEnabled(True)
        self.myBookStatus.setEnabled(False)
        return

 4、信号四

  •  self.allBookButton.clicked.connect(self.allBookButtonClicked)
  • 绑定连接所有书籍按钮
  • 点击所有书籍按钮可调用所有书籍模块,查看所有的书籍
def allBookButtonClicked(self):
    self.layout.removeWidget(self.borrowStatusView)
    sip.delete(self.borrowStatusView)
    self.storageView = BookStorageViewer()
    self.borrowStatusView = BorrowStatusViewer(self.StudentId)
    self.layout.addWidget(self.storageView)
    self.allBookButton.setEnabled(False)
    self.myBookStatus.setEnabled(True)
    return

 (四)程序入口

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon('./iron-man.png'))
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    dr = StudentHome("PB15000135")
    dr.show()
    sys.exit(app.exec_())

 四、学生页面整体效果展示

  • 学生主界面

  • 点击借书
  • 弹出借阅书籍界面

  • 点击还书
  • 弹出归还书籍界面

  • 点击借阅状态
  • 显示未归还书籍信息和已归还书籍信息

待后续更新....

标签:Qt,--,self,归还,设计,借阅,书籍,页面
From: https://www.cnblogs.com/LoLong/p/16993983.html

相关文章

  • Python 任务自动化工具 tox 教程
    在我刚翻译完的Python打包​​系列文章​​中,作者提到了一个神奇的测试工具tox,而且他本人就是tox的维护者之一。趁着话题的相关性,本文将对它做简单的介绍,说不定大家在......
  • 深拷贝和浅拷贝
    参考:js数组和对象深拷贝的方法https://www.cnblogs.com/webSnow/p/16134946.html<!DOCTYPEhtml><html><body><h1>JavaScript数组</h1><p>请单击按钮,以使用负数......
  • 2019 年 stackoverflow 网站最受欢迎的 20 个 Python 问题
    在最新一期的“Python开发者周刊”(Pycoder'sweekly)里,我看到一则有意思的分享,故转出来分享给大家。该分享来自是一份”pythonweeklyreports“,统计了2019年里stackoverf......
  • 远程连接报错
    一、问题 远程连接报错:出现身份验证错误,要求的函数不受支持   二、解决方法1、window+R键,打开运行窗口,输入“regedit”,打开注册表2、找到注册表路径,计算机(可......
  • Python 官方团队在打包项目中踩过的坑
    花下猫语:这是packaging系列的第三篇译文,该系列是全网关于此话题的最详尽(水平也很高)的一个系列。原作者是Python官方打包团队成员,是virtualenv和tox项目的维护者,及s......
  • 【过程】游戏王简单检索
    游戏王的卡牌对我童年有着深刻的影响,所以打算做一个卡牌的检索publicstaticvoidmain(String[]args){System.out.println("请您输入想检索的卡码:1-12");Syst......
  • Python 打包——过去、现在与未来
    英文|​​Pythonpackaging-Past,Present,Future​​【1】原作|BERNATGABOR译者|豌豆花下猫声明:本文获得原作者授权翻译,转载请保留原文出处,请勿用于商业或非法......
  • 【译】PEP-3129 类装饰器
    PEP原文:​​https://www.python.org/dev/peps/pep-3129​​PEP标题:ClassDecoratorsPEP作者:CollinWinter创建日期:2007-05-01合入版本:3.0译者:​​豌豆花下猫​​(Pyth......
  • 我的 2019 年 Python 文章榜单
    现在是2020年的第一天,我相信从昨天开始,各位的信息流里肯定充斥了各式各样的年度盘点/回顾/总结/记录之类的内容。虽然来得稍晚了,但我还是想给诸位送上这一篇文章。我将在......
  • ubuntu配置nfs
    服务器sudoaptinstallnfs-kernel-server/etc/exports中添加共享目录/home/xpy/cig*(rw,sync,no_root_squash)客户端sudoaptinstallnfs-commonmount-tnfs19......