先看截图效果:
要不然看个 动态效果图 也可以:
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_())
优化方面,自己看着办!!
---- 结束 ----
仅学习。