跳转至

Pagination 分页器

当有大量数据需要分页显示时,使用分页器组件进行页面之间的跳转和导航。样式参考 Element Plus,包含总条数显示和跳转输入框。

基础用法

分页器预览

from monkeyqt import MkPagination

# 创建分页器,总数据 100 条,每页展示 10 条pagination = MkPagination(total=100, page_size=10)

# 监听页码切换信号
pagination.pageChanged.connect(lambda page: print(f"当前跳转到第 {page} ))

API 属性与方法

MkPagination 构造函数 &

MkPagination(total=0, page_size=10, current=1, parent=None)
参数 类型 默认值 说明
total int 0 总数据条数
page_size int 10 每页显示条目个数
current int 1 默认初始页码

核心方法

方法名 参数 返回值 说明
set_total(total) int None 更新总条数,重新计算页码并更新 UI
set_page_size(size) int None 动态更新每页条目数
set_current_page(page) int None 代码设置当前页码,范围在 1 到总页数之间

属性 ( ((Qt Properties)

属性名称 类型 默认值 说明
current_page int 1 获取当前选中的页码
total int 0 获取或设置总条数

信号

信号名称 参数 说明
pageChanged (int) 当页码被点击切换或跳转输入框回车确定时发射,参数为跳转的目标页码

示例代码

以下示例展示了分页器动态渲染数据列表的效果。

import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QListWidget, QLabel
from monkeyqt import MkPagination

class PaginationDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Pagination Demo")
        self.resize(500, 400)

        layout = QVBoxLayout(self)

        # 准备数据源        self.all_data = [f"数据条目 - #{i:03d}" for i in range(1, 126)] # 125条数据 #
        # 1. 列表展示控件
        self.list_widget = QListWidget()
        layout.addWidget(self.list_widget)

        # 2. 分页器        self.page_size = 10
        self.pagination = MkPagination(total=len(self.all_data), page_size=self.page_size)
        layout.addWidget(self.pagination)

        # 监听页码切换
        self.pagination.pageChanged.connect(self._render_page)

        # 初始加载第一页        self._render_page(1)

    def _render_page(self, page):
        # 清空当前列表
        self.list_widget.clear()

        # 计算切片索引
        start = (page - 1) * self.page_size
        end = start + self.page_size

        # 填充当前页数据        page_data = self.all_data[start:end]
        self.list_widget.addItems(page_data)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = PaginationDemo()
    window.show()
    sys.exit(app.exec())