QTableWidget分页
时间: 2025-06-16 12:24:08 浏览: 18
### 在 PyQt 或 PySide 的 QTableWidget 中实现分页功能
要在 PyQt 或 PySide 的 `QTableWidget` 中实现分页功能,可以按照以下方式设计代码逻辑。分页的核心思想是限制每次显示的行数,并通过按钮或其他控件切换页面以加载不同的数据子集。
以下是实现分页功能的完整示例代码:
```python
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QTableWidget, QTableWidgetItem
class PaginatedTable(QWidget):
def __init__(self):
super().__init__()
self.layout = QVBoxLayout()
# 初始化表格
self.table = QTableWidget()
self.table.setColumnCount(3) # 示例:3 列
self.table.setHorizontalHeaderLabels(["列1", "列2", "列3"])
# 添加表格到布局
self.layout.addWidget(self.table)
# 分页按钮
self.prev_button = QPushButton("上一页")
self.next_button = QPushButton("下一页")
self.page_label = QPushButton("第 1 页") # 显示当前页码
self.page_label.setEnabled(False) # 不可点击
# 按钮布局
button_layout = QVBoxLayout()
button_layout.addWidget(self.prev_button)
button_layout.addWidget(self.page_label)
button_layout.addWidget(self.next_button)
# 将按钮布局添加到主布局
self.layout.addLayout(button_layout)
self.setLayout(self.layout)
# 数据源和分页参数
self.data = [["行%d列1" % i, "行%d列2" % i, "行%d列3" % i] for i in range(1, 101)] # 示例数据
self.rows_per_page = 10 # 每页显示的行数
self.current_page = 0
# 连接信号与槽
self.prev_button.clicked.connect(self.prev_page)
self.next_button.clicked.connect(self.next_page)
# 加载第一页数据
self.load_page()
def load_page(self):
"""加载当前页的数据"""
start_index = self.current_page * self.rows_per_page
end_index = start_index + self.rows_per_page
page_data = self.data[start_index:end_index]
# 设置表格行数
self.table.setRowCount(len(page_data))
# 填充数据
for row_idx, row_data in enumerate(page_data):
for col_idx, cell_data in enumerate(row_data):
self.table.setItem(row_idx, col_idx, QTableWidgetItem(str(cell_data)))
# 更新页码标签
self.page_label.setText(f"第 {self.current_page + 1} 页")
def prev_page(self):
"""切换到上一页"""
if self.current_page > 0:
self.current_page -= 1
self.load_page()
def next_page(self):
"""切换到下一页"""
max_pages = (len(self.data) - 1) // self.rows_per_page + 1
if self.current_page < max_pages - 1:
self.current_page += 1
self.load_page()
if __name__ == "__main__":
app = QApplication([])
window = PaginatedTable()
window.resize(600, 400)
window.show()
app.exec()
```
#### 实现说明
1. **数据分页逻辑**:将所有数据分为多个子集,每个子集对应一个页面[^1]。
2. **动态加载数据**:通过按钮点击事件动态加载不同页面的数据[^2]。
3. **界面交互**:使用 `QPushButton` 控制分页操作,并在按钮点击时更新表格内容。
#### 注意事项
- 如果数据量较大,建议结合数据库查询优化,避免一次性加载所有数据[^2]。
- 可根据实际需求调整每页显示的行数 `rows_per_page`。
阅读全文
相关推荐


















