PyQt5 使用QtSql模块对Sqlite数据库表进行分页显示

先看截图效果:

在这里插入图片描述

要不然看个 动态效果图 也可以:

请添加图片描述

DB Browser for SQLite 可视化软件:

用于创建、设计、浏览和编辑与SQLite兼容的数据库文件的可视化工具。
下载地址:https://github.com/sqlitebrowser/sqlitebrowser/releases


读取Sqlite数据库表,对 表数据 进行分页显示:

笔者的Sqlite数据库文件和表数据,如下:
在这里插入图片描述

sqlitetest.db 文件地址:

https://download.csdn.net/download/qq_52722885/87057146

代码如下:

from PyQt5.QtWidgets import QApplication, QWidget, QTableView, QLabel, QPushButton
from PyQt5.QtWidgets import QMessageBox, QLineEdit
from PyQt5.QtSql import QSqlDatabase, QSqlQueryModel

import math

if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)

    win = QWidget()
    win.setWindowTitle("将 数据表中的全部数据 进行分页显示 实例")
    win.resize(800, 300)

    totalPage = 0  # 总页数
    currPage = 1  # 当前页
    totalRecord = 0  # 总记录数
    pageSize = 5 #一页5条数据
    offset = 0

    prevPageBtn = QPushButton("上一页",win)
    prevPageBtn.move(0,10)
    nextPageBtn = QPushButton("下一页",win)
    nextPageBtn.move(100,10)

    jumpToLabel = QLabel("跳转到第", win)
    jumpToLabel.move(200,16)
    lineEdit = QLineEdit(win)
    lineEdit.move(250, 12)
    lineEdit.setFixedWidth(26)
    pageLabel = QLabel("页", win)
    pageLabel.move(280, 16)
    goBtn = QPushButton("GoTo", win)
    goBtn.move(300, 10)

    db = QSqlDatabase.addDatabase("QSQLITE")
    db.setDatabaseName("sqlitetest.db")
    db.open()  # 打开数据库,如果不打开则执行不了

    qModel = QSqlQueryModel()

    qModel.setQuery("select * from stu;")
    totalRecord = qModel.rowCount()

    totalPage = math.ceil(totalRecord / 5)

    qModel.setQuery("select * from stu limit %d,%d;"%(offset, pageSize))

    tView = QTableView(win)
    tView.move(0, 50)
    tView.resize(750, 200)
    tView.setModel(qModel)

    totalPageLabel = QLabel("总共 %s 页" % totalPage, win)
    totalPageLabel.move(0, 280)

    currPageLabel = QLabel("当前第 %s 页" % currPage , win)
    currPageLabel.move(100, 280)

    totalItemLabel = QLabel("共 %s 条" % totalRecord, win)
    totalItemLabel.move(200, 280)

    def prevSlot():
        global currPage
        global pageSize
        global offset
        if currPage == 1:
            QMessageBox.about(win, "提示", "已经是第一页了")
            return "已经是第一页了"

        currPage -= 1
        offset = (currPage-1)*pageSize

        qModel.setQuery("select * from stu limit %d,%d;" % (offset, pageSize))
        tView.setModel(qModel)

        currPageLabel.setText("当前第 %s 页" % currPage)

    def nextSlot():
        global currPage
        global pageSize
        global offset
        if currPage == totalPage:
            QMessageBox.about(win, "提示", "已经是最后一页了")
            return "已经是最后一页了"

        currPage += 1
        offset = (currPage-1)*pageSize

        qModel.setQuery("select * from stu limit %d,%d;" % (offset, pageSize))
        tView.setModel(qModel)

        currPageLabel.setText("当前第 %s 页" % currPage)

    def goSlot():
        global currPage
        global pageSize
        global offset

        val = lineEdit.text()
        if val == "":
            return

        currPage = int(val)
        if currPage > totalPage:
            QMessageBox.about(win, "提示", "已经是最后一页了")
            lineEdit.setText("")
            return "已经是最后一页了"

        offset = (currPage-1)*pageSize

        qModel.setQuery("select * from stu limit %d,%d;" % (offset, pageSize))
        tView.setModel(qModel)

        currPageLabel.setText("当前第 %s 页" % currPage)


    prevPageBtn.clicked.connect(prevSlot)
    nextPageBtn.clicked.connect(nextSlot)
    goBtn.clicked.connect(goSlot)

    win.show()
    sys.exit(app.exec_())


优化方面,自己看着办!!

---- 结束 ----
仅学习。

猜你喜欢

转载自blog.csdn.net/qq_52722885/article/details/127901430