QTableView分页示例
时间: 2023-09-16 15:12:57 浏览: 116
当使用 QTableView 时,QSqlQueryModel 是一个常用的模型类,它可以从数据库中检索数据并将其显示在 QTableView 中。下面是一个示例,演示如何在 QTableView 中实现分页功能:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView, QAbstractItemView, QHeaderView, QWidget, QHBoxLayout, QPushButton, QLabel, QLineEdit
from PyQt5.QtCore import Qt
from PyQt5.QtSql import QSqlDatabase, QSqlQueryModel
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建数据库连接
self.db = QSqlDatabase.addDatabase("QSQLITE")
self.db.setDatabaseName("database.db")
self.db.open()
# 创建查询模型
self.model = QSqlQueryModel()
self.model.setQuery("SELECT * FROM your_table")
# 设置分页参数
self.page_size = 10
self.current_page = 1
self.total_pages = (self.model.rowCount() + self.page_size - 1) // self.page_size
# 创建分页控件
self.page_label = QLabel()
self.page_label.setAlignment(Qt.AlignCenter)
self.prev_button = QPushButton("上一页")
self.next_button = QPushButton("下一页")
# 创建表格视图
self.table_view = QTableView()
self.table_view.setModel(self.model)
self.table_view.setSelectionBehavior(QAbstractItemView.SelectRows)
self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
# 创建布局
layout = QHBoxLayout()
layout.addWidget(self.prev_button)
layout.addWidget(self.page_label)
layout.addWidget(self.next_button)
widget = QWidget()
widget.setLayout(layout)
main_layout = QVBoxLayout()
main_layout.addWidget(self.table_view)
main_layout.addWidget(widget)
central_widget = QWidget()
central_widget.setLayout(main_layout)
self.setCentralWidget(central_widget)
# 连接槽函数
self.prev_button.clicked.connect(self.previous_page)
self.next_button.clicked.connect(self.next_page)
# 更新分页标签
self.update_page_label()
def update_page_label(self):
self.page_label.setText(f"第 {self.current_page}/{self.total_pages} 页")
def previous_page(self):
if self.current_page > 1:
self.current_page -= 1
self.update_model()
def next_page(self):
if self.current_page < self.total_pages:
self.current_page += 1
self.update_model()
def update_model(self):
offset = (self.current_page - 1) * self.page_size
query = f"SELECT * FROM your_table LIMIT {self.page_size} OFFSET {offset}"
self.model.setQuery(query)
self.update_page_label()
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
在上述示例中,我们使用 QTableView 和 QSqlQueryModel 来显示数据库中的数据。我们还创建了两个按钮来实现分页,并使用 QLabel 显示当前页数信息。你可以根据需要修改示例中的表名和数据库文件名。
希望这个示例能对你有所帮助!如果你还有其他问题,请随时提问。
阅读全文