乐之之

知而行乐,乐而行之,天道酬勤,学无止境。
pyqt5图书管理系统--7、管理员页面设计之所有书籍

本节分为两个部分:整合管理员界面、所有书籍查询界面设计。

主要流程:1、使用所有书籍查询界面,可以查询数据库内所有书籍的书名、书号、作者等相关信息。

     2、可以通过书籍分类进行查询,同时可以进行翻页操作和页数输入跳转操作。

       3、也可使用模糊查询,输入关键字,返回和关键字相关的书籍信息。

     4、整合所有管理员页面的模块,进入管理员界面后显示所有书籍查询界面及其他功能。

一、所有书籍查询界面

导入的模块:

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

 (一)类基础设置

  • 除了类的设置之外,还要设置一些初始化参数数值
class BookStorageViewer(QWidget):
    def __init__(self):
        super(BookStorageViewer, self).__init__()
        self.resize(1300, 500)
        self.setWindowTitle("欢迎使用图书馆管理系统")
        # 查询模型
        self.queryModel = None
        # 数据表
        self.tableView = None
        # 当前页
        self.currentPage = 0
        # 总页数
        self.totalPage = 0
        # 总记录数
        self.totalRecord = 0
        # 每页数据数
        self.pageRecord = 10
        self.setUpUI()

(二)所有书籍查询界面设计

  • 调用主函数,实例化水平布局控件类型
def setUpUI(self):
    self.Vlayout = QVBoxLayout()
    self.Hlayout_top = QHBoxLayout()
    self.Hlayout_bottom = QHBoxLayout()

1、垂直布局——表头部分

  • self.Hlayout_top

  • 水平布局

(1)查询框设置

  •  设置输入框的高度、字体大小
        self.searchEdit = QLineEdit()
        self.searchEdit.setFixedHeight(32)
        font = QFont()
        font.setPixelSize(15)
        self.searchEdit.setFont(font)

(2) 设置查询按钮

  • 设置按钮、高度、字体大小、图标样式
self.searchButton = QPushButton("查询")
self.searchButton.setFixedHeight(32)
self.searchButton.setFont(font)
self.searchButton.setIcon(QIcon(QPixmap("./images/search.png")))

(3)设置选项输入框

  • 设置成可选型输入框,可以根据分类进行搜索。
self.condisionComboBox = QComboBox()
searchCondision = ['按书名查询', '按书号查询', '按作者查询', '按分类查询', '按出版社查询']
self.condisionComboBox.setFixedHeight(32)
self.condisionComboBox.setFont(font)
self.condisionComboBox.addItems(searchCondision)

(4)在水平布局中添加查询输入框、查询按钮、选项输入框

self.Hlayout_top.addWidget(self.searchEdit)
self.Hlayout_top.addWidget(self.searchButton)
self.Hlayout_top.addWidget(self.condisionComboBox)
  • 表头效果展示

2、垂直布局——结尾部分

  • Hlayout = QHBoxLayout()

(1)设置标签“跳转到第”

self.jumpToLabel = QLabel("跳转到第")

 (2)设置输入框

self.pageEdit = QLineEdit()
self.pageEdit.setFixedWidth(30)

 (3)设置标签“/*页”

s = "/" + str(self.totalPage) + "页"
self.pageLabel = QLabel(s)

 (4)设置按钮“跳转”

self.jumpToButton = QPushButton("跳转")

 (5)设置标签“前一页”

self.prevButton = QPushButton("前一页")
self.prevButton.setFixedWidth(60)

  (6)设置标签“后一页”

self.backButton = QPushButton("后一页")
self.backButton.setFixedWidth(60)

(7)在水平布局中添加以上内容

Hlayout = QHBoxLayout()
Hlayout.addWidget(self.jumpToLabel)
Hlayout.addWidget(self.pageEdit)
Hlayout.addWidget(self.pageLabel)
Hlayout.addWidget(self.jumpToButton)
Hlayout.addWidget(self.prevButton)
Hlayout.addWidget(self.backButton)
widget = QWidget()
widget.setLayout(Hlayout)
widget.setFixedWidth(500)
self.Hlayout_bottom.addWidget(widget)
  •  结尾效果展示

3、垂直布局——中间表格部分

  • 设置表格
  • 此表格需要从数据库进行读取自动返回显示在表内
  • 需要用到两个模型:表格模型QTableView()、数据库查询模型QSqlQueryModel()

(1)连接数据库

self.db = QSqlDatabase.addDatabase("QSQLITE")
self.db.setDatabaseName('./db/LibraryManagement.db')
self.db.open()

 (2)设置QTableView()表格模型

# 设置QT表格的宽度自适应 horizontalHeader() 宽度自适应内容宽度以及填充整个表格
self.tableView.horizontalHeader().setStretchLastSection(True)
# 自动填充
self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
# 表格内容不能修改
self.tableView.setEditTriggers(QAbstractItemView.NoEditTriggers)

 (3)设置QSqlQueryModel()数据库查询模型

  •  self.searchButtonClicked()
  • 调用查询函数
self.queryModel = QSqlQueryModel()
self.searchButtonClicked()
self.tableView.setModel(self.queryModel)

 (4)设置列标题

self.queryModel.setHeaderData(0, Qt.Horizontal, "书名")
self.queryModel.setHeaderData(1, Qt.Horizontal, "书号")
self.queryModel.setHeaderData(2, Qt.Horizontal, "作者")
self.queryModel.setHeaderData(3, Qt.Horizontal, "分类")
self.queryModel.setHeaderData(4, Qt.Horizontal, "出版社")
self.queryModel.setHeaderData(5, Qt.Horizontal, "出版时间")
self.queryModel.setHeaderData(6, Qt.Horizontal, "库存")
self.queryModel.setHeaderData(7, Qt.Horizontal, "剩余可借")
self.queryModel.setHeaderData(8, Qt.Horizontal, "总借阅次数")
  • 表格部分效果展示 

4、设置总布局

  • 将三个部分布局依次添加进垂直布局中
  • 再将整个垂直布局放在窗口中
self.Vlayout.addLayout(self.Hlayout_top)
self.Vlayout.addWidget(self.tableView)
self.Vlayout.addLayout(self.Hlayout_bottom)
self.setLayout(self.Vlayout)
  •  所有书籍查询界面整体效果展示

(三)信号传递

  • 绑定信号
self.searchButton.clicked.connect(self.searchButtonClicked)
self.prevButton.clicked.connect(self.prevButtonClicked)
self.backButton.clicked.connect(self.backButtonClicked)
self.jumpToButton.clicked.connect(self.jumpToButtonClicked)
self.searchEdit.returnPressed.connect(self.searchButtonClicked)

1、发送信号一

  •  信号一有两个事件类型:鼠标点击和回车键
  • self.searchButton.clicked.connect(self.searchButtonClicked)

  • self.searchEdit.returnPressed.connect(self.searchButtonClicked)
  • 触发后调用数据库信息搜索函数(查询函数)

(1)查询函数

def searchButtonClicked(self):
    self.currentPage = 1
    # 获取用户输入跳转的文本,将第一页设置为初始化页数
    self.pageEdit.setText(str(self.currentPage))
    self.getPageCount()
    s = "/" + str(int(self.totalPage)) + "页"
    self.pageLabel.setText(s)
    index = (self.currentPage - 1) * self.pageRecord
    self.recordQuery(index)
    return
  •  通过调用计算总页数函数来获取页面所要显示的页数及信息
  •  self.getPageCount()
def getPageCount(self):
    self.getTotalRecordCount()
    # 上取整,如num=(40+10-1)/10就是4页,num=(41+10-1)/10就是5页
    # totalRecord查询得到的记录数(根据条件得到部分和总数),pageRecord是一个类常量
    self.totalPage = int((self.totalRecord + self.pageRecord - 1) / self.pageRecord)
    return
    • 若想得到页数信息则还需获取数据库相对应的信息总行数
    • def getTotalRecordCount(self):
          # 从book表单里查询总的行数
          self.queryModel.setQuery("SELECT * FROM Book")
          # 总记录数等于 模型查询到的所有行数信息
          self.totalRecord = self.queryModel.rowCount()
          return

(2)具体分页查询函数

  • self.recordQuery(index)
  • 分页记录查询,根据条件得到记录数量,以便分布展示。

查看代码
def recordQuery(self, index):
    # 1.选定查询书籍的类型。
    # 匹配类型字段,用于sql语句进行数据库信息类型的查询
    conditionOrCategory = self.condisionComboBox.currentText()
    condition = {
        'BookName': "按书名查询",
        'BookId': "按书号查询",
        'Auth': "按作者查询",
        'Category': '按分类查询',
        'Publisher': '按出版社查询'
    }
    for k, v in condition.items():
        if conditionOrCategory == v:
            conditionOrCategory = k

    # 2.根据模糊查询条件,得到记录的信息,最后获取查询记录的行数
    temp = self.searchEdit.text()
    s = '%'
    for i in range(0, len(temp)):
        s = s + temp[i] + "%"
    # 下面语法为查询字段为conditionOrCategory的记录,并按字段conditionOrCategory排序,
    # 该字段里面匹配 "%str1%str2%……“这样的文本信息
    queryCondition = ("SELECT * FROM Book WHERE %s LIKE '%s' ORDER BY %s " % (
        conditionOrCategory, s, conditionOrCategory))
    self.queryModel.setQuery(queryCondition)
    # 得到查询到的记录数量
    self.totalRecord = self.queryModel.rowCount()

    # 3.当查询无记录时提醒,再次刷新下面状态栏的记录数
    if self.totalRecord == 0:
        print(QMessageBox.information(self, "提醒", "查询无记录"))
        # 重新查询所有书籍,显示在界面中。
        queryCondition = "select * from Book"
        self.queryModel.setQuery(queryCondition)
        self.totalRecord = self.queryModel.rowCount()
        self.totalPage = int((self.totalRecord + self.pageRecord - 1) / self.pageRecord)
        label = "/" + str(int(self.totalPage)) + "页"
        self.pageLabel.setText(label)

        # 下面语句加了字段排序,然后限定从第几条开始查,查10条
        queryCondition = (
                "select * from Book ORDER BY %s  limit %d,%d "
                % (conditionOrCategory, index, self.pageRecord))
        self.queryModel.setQuery(queryCondition)
        self.setButtonStatus()
        return
    # 4.若查询有记录信息时。
    # 总页数 = int(总记录数 + 每页数据数 -1 )/ 每页数据数
    self.totalPage = int((self.totalRecord + self.pageRecord - 1) / self.pageRecord)
    label = "/" + str(int(self.totalPage)) + "页"
    self.pageLabel.setText(label)
    queryCondition = ("SELECT * FROM Book WHERE %s LIKE '%s' ORDER BY %s LIMIT %d,%d " % (
        conditionOrCategory, s, conditionOrCategory, index, self.pageRecord))
    self.queryModel.setQuery(queryCondition)
    self.setButtonStatus()
    return
  •  页面展示时,要根据输入框内的页数,前一页和后一页的状态,进行翻页设置
  • self.setButtonStatus()
def setButtonStatus(self):
    if self.currentPage == self.totalPage:
        self.prevButton.setEnabled(True)
        self.backButton.setEnabled(False)
    if self.currentPage == 1:
        self.prevButton.setEnabled(False)
        self.backButton.setEnabled(True)
    if self.totalPage > self.currentPage > 1:
        self.prevButton.setEnabled(True)
        self.backButton.setEnabled(True)

 2、发送信号二

  •  self.prevButton.clicked.connect(self.prevButtonClicked)
  • 向前翻页(前一页)
def prevButtonClicked(self):
    self.currentPage -= 1
    if self.currentPage <= 1:
        self.currentPage = 1
    self.pageEdit.setText(str(self.currentPage))
    index = (self.currentPage - 1) * self.pageRecord
    self.recordQuery(index)
    return
  • 翻页后重新进行分页查询,根据新的条件得到记录数量,进行分布展示。
  • self.recordQuery(index)
  • 具体代码见信号一里的(2)具体分页查询函数

 3、发送信号三

  • self.backButton.clicked.connect(self.backButtonClicked)
  • 向后翻页(后一页)
def backButtonClicked(self):
    self.currentPage += 1
    if self.currentPage >= int(self.totalPage):
        self.currentPage = int(self.totalPage)
    self.pageEdit.setText(str(self.currentPage))
    index = (self.currentPage - 1) * self.pageRecord
    self.recordQuery(index)
    return
  • 翻页后重新进行分页查询,根据新的条件得到记录数量,进行分布展示。
  • self.recordQuery(index)
  • 具体代码见信号一里的(2)具体分页查询函数

 4、发送信号四

  • self.jumpToButton.clicked.connect(self.jumpToButtonClicked)
  • 根据页数输入框内的数字,进行指定跳转翻页处理
def jumpToButtonClicked(self):
    # 判断输入框内是否是数字
    if self.pageEdit.text().isdigit():
        self.currentPage = int(self.pageEdit.text())
        if self.currentPage > self.totalPage:
            self.currentPage = self.totalPage
        if self.currentPage <= 1:
            self.currentPage = 1
    else:
        self.currentPage = 1
    index = (self.currentPage - 1) * self.pageRecord
    self.pageEdit.setText(str(self.currentPage))
    self.recordQuery(index)
    return
  • 同上,翻页后重新进行分页查询,根据新的条件得到记录数量,进行分布展示。
  • self.recordQuery(index)
  • 具体代码见信号一里的(2)具体分页查询函数

(四)函数逻辑解析图

(五)程序入口

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("./images/MainWindow_1.png"))
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    mainWindow = BookStorageViewer()
    mainWindow.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 *
from addBookDialog import addBookDialog
from dropBookDialog import dropBookDialog
from UserMange import UserManage
from BookStorageViewer import BookStorageViewer

 (一)类基础设置

class AdminHome(QWidget):
    def __init__(self):
        super(AdminHome, self).__init__()
        self.setUpUi()

    def setUpUi(self):
        self.resize(900,600)
        self.setWindowTitle("欢迎进入管理员主页")
        self.layout = QHBoxLayout()
        self.buttonlayout = QVBoxLayout()
        self.setLayout(self.layout)

 (二)管理员页面布局

1、设置标签、标签字体大小、标签宽高

font = QFont()
font.setPixelSize(16)

self.userManageButton = QPushButton("用户管理")
self.addBookButton = QPushButton("添加书籍")
self.dropBookButton = QPushButton("淘汰书籍")

self.userManageButton.setFont(font)
self.addBookButton.setFont(font)
self.dropBookButton.setFont(font)

self.userManageButton.setFixedWidth(100)
self.userManageButton.setFixedHeight(42)
self.addBookButton.setFixedWidth(100)
self.addBookButton.setFixedHeight(42)
self.dropBookButton.setFixedWidth(100)
self.dropBookButton.setFixedHeight(42)

 2、添加按钮进入垂直布局

# 将三个按钮添加到垂直布局中
self.buttonlayout.addWidget(self.addBookButton)
self.buttonlayout.addWidget(self.userManageButton)
self.buttonlayout.addWidget(self.dropBookButton)
# 将按钮布局添加到整体垂直布局中
self.layout.addLayout(self.buttonlayout)

 3、添加查询所有书籍模块

  • 将所有书籍界面直接添加进管理员界面。
self.storageView = BookStorageViewer()
self.layout.addWidget(self.storageView)

(三)信号传递

self.addBookButton.clicked.connect(self.addBookButtonClicked)
self.dropBookButton.clicked.connect(self.dropBookButtonClicked)
self.userManageButton.clicked.connect(self.usermangeClicked)

1、信号一

  • self.addBookButton.clicked.connect(self.addBookButtonClicked)
  • 点击添加书籍按钮,调用添加书籍模块
    def addBookButtonClicked(self):
        addDialog = addBookDialog()
        addDialog.show()
        addDialog.exec_()

2、信号二

  • self.dropBookButton.clicked.connect(self.dropBookButtonClicked)
  • 点击淘汰书籍按钮,调用淘汰书籍模块
    def dropBookButtonClicked(self):
        dropDialog = dropBookDialog()
        dropDialog.show()
        dropDialog.exec_()

3、信号三

  • self.userManageButton.clicked.connect(self.usermangeClicked)
  • 点击用户管理按钮,调用用户管理模块
    def usermangeClicked(self):
        usermange = UserManage()
        usermange.show()
        usermange.exec_()

(四)程序入口

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

三、完整代码

(一)所有书籍查询界面代码

所有书籍查询界面完整代码
 import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt
import qdarkstyle
from PyQt5.QtSql import *


class BookStorageViewer(QWidget):
    def __init__(self):
        super(BookStorageViewer, self).__init__()
        self.resize(1300, 500)
        self.setWindowTitle("欢迎使用图书馆管理系统")
        # 查询模型
        self.queryModel = None
        # 数据表
        self.tableView = None
        # 当前页
        self.currentPage = 0
        # 总页数
        self.totalPage = 0
        # 总记录数
        self.totalRecord = 0
        # 每页数据数
        self.pageRecord = 10
        self.setUpUI()

    def setUpUI(self):
        self.Vlayout = QVBoxLayout()
        self.Hlayout_top = QHBoxLayout()
        self.Hlayout_bottom = QHBoxLayout()

        # Hlayout_top控件的初始化
        self.searchEdit = QLineEdit()
        self.searchEdit.setFixedHeight(32)
        font = QFont()
        font.setPixelSize(15)
        self.searchEdit.setFont(font)

        self.searchButton = QPushButton("查询")
        self.searchButton.setFixedHeight(32)
        self.searchButton.setFont(font)
        self.searchButton.setIcon(QIcon(QPixmap("./images/search.png")))

        self.condisionComboBox = QComboBox()
        searchCondision = ['按书名查询', '按书号查询', '按作者查询', '按分类查询', '按出版社查询']
        self.condisionComboBox.setFixedHeight(32)
        self.condisionComboBox.setFont(font)
        self.condisionComboBox.addItems(searchCondision)

        self.Hlayout_top.addWidget(self.searchEdit)
        self.Hlayout_top.addWidget(self.searchButton)
        self.Hlayout_top.addWidget(self.condisionComboBox)

        # Hlayout_bottom初始化
        self.jumpToLabel = QLabel("跳转到第")
        self.pageEdit = QLineEdit()
        self.pageEdit.setFixedWidth(30)
        s = "/" + str(self.totalPage) + "页"
        self.pageLabel = QLabel(s)
        self.jumpToButton = QPushButton("跳转")
        self.prevButton = QPushButton("前一页")
        self.prevButton.setFixedWidth(60)
        self.backButton = QPushButton("后一页")
        self.backButton.setFixedWidth(60)

        Hlayout = QHBoxLayout()
        Hlayout.addWidget(self.jumpToLabel)
        Hlayout.addWidget(self.pageEdit)
        Hlayout.addWidget(self.pageLabel)
        Hlayout.addWidget(self.jumpToButton)
        Hlayout.addWidget(self.prevButton)
        Hlayout.addWidget(self.backButton)
        widget = QWidget()
        widget.setLayout(Hlayout)
        widget.setFixedWidth(500)
        self.Hlayout_bottom.addWidget(widget)

        # tableView
        # 序号,书名,书号,作者,分类,出版社,出版时间,库存,剩余可借,总借阅次数
        self.db = QSqlDatabase.addDatabase("QSQLITE")
        self.db.setDatabaseName('./db/LibraryManagement.db')
        self.db.open()
        self.tableView = QTableView()
        # 设置QT表格的宽度自适应 horizontalHeader() 宽度自适应内容宽度以及填充整个表格
        self.tableView.horizontalHeader().setStretchLastSection(True)
        # 自动填充
        self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        # 表格内容不能修改
        self.tableView.setEditTriggers(QAbstractItemView.NoEditTriggers)

        # sql数据库查询模型
        self.queryModel = QSqlQueryModel()
        self.searchButtonClicked()
        self.tableView.setModel(self.queryModel)

        # 设置列标题
        self.queryModel.setHeaderData(0, Qt.Horizontal, "书名")
        self.queryModel.setHeaderData(1, Qt.Horizontal, "书号")
        self.queryModel.setHeaderData(2, Qt.Horizontal, "作者")
        self.queryModel.setHeaderData(3, Qt.Horizontal, "分类")
        self.queryModel.setHeaderData(4, Qt.Horizontal, "出版社")
        self.queryModel.setHeaderData(5, Qt.Horizontal, "出版时间")
        self.queryModel.setHeaderData(6, Qt.Horizontal, "库存")
        self.queryModel.setHeaderData(7, Qt.Horizontal, "剩余可借")
        self.queryModel.setHeaderData(8, Qt.Horizontal, "总借阅次数")

        self.Vlayout.addLayout(self.Hlayout_top)
        self.Vlayout.addWidget(self.tableView)
        self.Vlayout.addLayout(self.Hlayout_bottom)
        self.setLayout(self.Vlayout)

        # 信号槽绑定
        self.searchButton.clicked.connect(self.searchButtonClicked)
        self.prevButton.clicked.connect(self.prevButtonClicked)
        self.backButton.clicked.connect(self.backButtonClicked)
        self.jumpToButton.clicked.connect(self.jumpToButtonClicked)
        self.searchEdit.returnPressed.connect(self.searchButtonClicked)

    # 设置窗体底部两个按钮“前一页”、“下一页”的状态
    def setButtonStatus(self):
        if self.currentPage == self.totalPage:
            self.prevButton.setEnabled(True)
            self.backButton.setEnabled(False)
        if self.currentPage == 1:
            self.prevButton.setEnabled(False)
            self.backButton.setEnabled(True)
        if self.totalPage > self.currentPage > 1:
            self.prevButton.setEnabled(True)
            self.backButton.setEnabled(True)

    # 得到数据总的行数(记录数)
    def getTotalRecordCount(self):
        # 从book表单里查询总的行数
        self.queryModel.setQuery("SELECT * FROM Book")
        # 总记录数等于 模型查询到的所有行数信息
        self.totalRecord = self.queryModel.rowCount()
        return

    # 得到总页数
    def getPageCount(self):
        self.getTotalRecordCount()
        # 上取整,如num=(40+10-1)/10就是4页,num=(41+10-1)/10就是5页
        # totalRecord查询得到的记录数(根据条件得到部分和总数),pageRecord是一个类常量
        self.totalPage = int((self.totalRecord + self.pageRecord - 1) / self.pageRecord)
        return

    # 分页记录查询,根据条件得到记录数量,以便分布展示
    def recordQuery(self, index):
        # 1.选定查询书籍的类型。
        # 匹配类型字段,用于sql语句进行数据库信息类型的查询
        conditionOrCategory = self.condisionComboBox.currentText()
        condition = {
            'BookName': "按书名查询",
            'BookId': "按书号查询",
            'Auth': "按作者查询",
            'Category': '按分类查询',
            'Publisher': '按出版社查询'
        }
        for k, v in condition.items():
            if conditionOrCategory == v:
                conditionOrCategory = k

        # 2.根据模糊查询条件,得到记录的信息,最后获取查询记录的行数
        temp = self.searchEdit.text()
        s = '%'
        for i in range(0, len(temp)):
            s = s + temp[i] + "%"
        # 下面语法为查询字段为conditionOrCategory的记录,并按字段conditionOrCategory排序,
        # 该字段里面匹配 "%str1%str2%……“这样的文本信息
        queryCondition = ("SELECT * FROM Book WHERE %s LIKE '%s' ORDER BY %s " % (
            conditionOrCategory, s, conditionOrCategory))
        self.queryModel.setQuery(queryCondition)
        # 得到查询到的记录数量
        self.totalRecord = self.queryModel.rowCount()

        # 3.当查询无记录时提醒,再次刷新下面状态栏的记录数
        if self.totalRecord == 0:
            print(QMessageBox.information(self, "提醒", "查询无记录"))
            # 重新查询所有书籍,显示在界面中。
            queryCondition = "select * from Book"
            self.queryModel.setQuery(queryCondition)
            self.totalRecord = self.queryModel.rowCount()
            self.totalPage = int((self.totalRecord + self.pageRecord - 1) / self.pageRecord)
            label = "/" + str(int(self.totalPage)) + "页"
            self.pageLabel.setText(label)

            # 下面语句加了字段排序,然后限定从第几条开始查,查10条
            queryCondition = (
                    "select * from Book ORDER BY %s  limit %d,%d "
                    % (conditionOrCategory, index, self.pageRecord))
            self.queryModel.setQuery(queryCondition)
            self.setButtonStatus()
            return
        # 4.若查询有记录信息时。
        # 总页数 = int(总记录数 + 每页数据数 -1 )/ 每页数据数
        self.totalPage = int((self.totalRecord + self.pageRecord - 1) / self.pageRecord)
        label = "/" + str(int(self.totalPage)) + "页"
        self.pageLabel.setText(label)
        queryCondition = ("SELECT * FROM Book WHERE %s LIKE '%s' ORDER BY %s LIMIT %d,%d " % (
            conditionOrCategory, s, conditionOrCategory, index, self.pageRecord))
        self.queryModel.setQuery(queryCondition)
        self.setButtonStatus()
        return

    # 点击查询,查询按钮的槽函数
    def searchButtonClicked(self):
        self.currentPage = 1
        # 获取用户输入跳转的文本,将第一页设置为初始化页数
        self.pageEdit.setText(str(self.currentPage))
        self.getPageCount()
        s = "/" + str(int(self.totalPage)) + "页"
        self.pageLabel.setText(s)
        index = (self.currentPage - 1) * self.pageRecord
        self.recordQuery(index)
        return

    # 向前翻页,前一页按钮的槽函数
    def prevButtonClicked(self):
        self.currentPage -= 1
        if self.currentPage <= 1:
            self.currentPage = 1
        self.pageEdit.setText(str(self.currentPage))
        index = (self.currentPage - 1) * self.pageRecord
        self.recordQuery(index)
        return

    # 向后翻页,后一页按钮的槽函数
    def backButtonClicked(self):
        self.currentPage += 1
        if self.currentPage >= int(self.totalPage):
            self.currentPage = int(self.totalPage)
        self.pageEdit.setText(str(self.currentPage))
        index = (self.currentPage - 1) * self.pageRecord
        self.recordQuery(index)
        return

    # 点击跳转,跳转按钮的槽函数
    def jumpToButtonClicked(self):
        # 判断输入框内是否是数字
        if self.pageEdit.text().isdigit():
            self.currentPage = int(self.pageEdit.text())
            if self.currentPage > self.totalPage:
                self.currentPage = self.totalPage
            if self.currentPage <= 1:
                self.currentPage = 1
        else:
            self.currentPage = 1
        index = (self.currentPage - 1) * self.pageRecord
        self.pageEdit.setText(str(self.currentPage))
        self.recordQuery(index)
        return


if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("./images/MainWindow_1.png"))
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    mainWindow = BookStorageViewer()
    mainWindow.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 *
from addBookDialog import addBookDialog
from dropBookDialog import dropBookDialog
from UserMange import UserManage
from BookStorageViewer import BookStorageViewer
class AdminHome(QWidget):
    def __init__(self):
        super(AdminHome, self).__init__()
        self.setUpUi()

    def setUpUi(self):
        self.resize(900,600)
        self.setWindowTitle("欢迎进入管理员主页")
        self.layout = QHBoxLayout()
        self.buttonlayout = QVBoxLayout()
        self.setLayout(self.layout)

        font = QFont()
        font.setPixelSize(16)

        self.userManageButton = QPushButton("用户管理")
        self.addBookButton = QPushButton("添加书籍")
        self.dropBookButton = QPushButton("淘汰书籍")

        self.userManageButton.setFont(font)
        self.addBookButton.setFont(font)
        self.dropBookButton.setFont(font)

        self.userManageButton.setFixedWidth(100)
        self.userManageButton.setFixedHeight(42)
        self.addBookButton.setFixedWidth(100)
        self.addBookButton.setFixedHeight(42)
        self.dropBookButton.setFixedWidth(100)
        self.dropBookButton.setFixedHeight(42)
        # 将三个按钮添加到垂直布局中
        self.buttonlayout.addWidget(self.addBookButton)
        self.buttonlayout.addWidget(self.userManageButton)
        self.buttonlayout.addWidget(self.dropBookButton)
        # 将按钮布局添加到垂直布局中
        self.layout.addLayout(self.buttonlayout)
        # 添加查询所有书籍模块
        self.storageView = BookStorageViewer()
        self.layout.addWidget(self.storageView)
        self.addBookButton.clicked.connect(self.addBookButtonClicked)
        self.dropBookButton.clicked.connect(self.dropBookButtonClicked)
        self.userManageButton.clicked.connect(self.usermangeClicked)
    def addBookButtonClicked(self):
        addDialog = addBookDialog()
        addDialog.show()
        addDialog.exec_()
    def dropBookButtonClicked(self):
        dropDialog = dropBookDialog()
        dropDialog.show()
        dropDialog.exec_()
    def usermangeClicked(self):
        usermange = UserManage()
        usermange.show()
        usermange.exec_()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    app.setWindowIcon(QIcon('./iron-man.png'))
    mianMindow = AdminHome()
    mianMindow.show()
    sys.exit(app.exec_())

四、管理员界面展示

  • 管理员主界面

  • 点击添加书籍按钮
  • 即可进入添加书籍界面,可在此界面进行相应操作

  • 点击用户管理
  • 可删除选中的用户

  • 点击淘汰书籍
  • 通过书号查询,来返回对应书籍信息,进行删除操作。

待后续更新....

posted on 2022-12-20 00:01  乐之之  阅读(240)  评论(0编辑  收藏  举报