QTableView数据库分页显示
时间: 2023-09-16 12:11:24 浏览: 218
要在QTableView中实现数据库分页显示,您需要使用QSqlTableModel。以下是一个示例代码:
```python
from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel
from PyQt5.QtCore import Qt
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.table_view = QTableView(self)
self.setCentralWidget(self.table_view)
self.database = QSqlDatabase.addDatabase("QSQLITE")
self.database.setDatabaseName("mydatabase.db")
if not self.database.open():
print("Unable to open database")
self.model = QSqlTableModel(self, self.database)
self.model.setTable("mytable")
self.model.select()
self.page_size = 50
self.current_page = 0
self.table_view.setModel(self.model)
self.table_view.setSortingEnabled(True)
self.table_view.verticalHeader().hide()
self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.update_table_view()
def update_table_view(self):
query = QSqlQuery(self.database)
query.exec_("SELECT COUNT(*) FROM mytable")
query.next()
total_records = query.value(0)
total_pages = total_records // self.page_size
if total_records % self.page_size:
total_pages += 1
self.model.setLimit(self.page_size)
self.model.setOffset(self.current_page * self.page_size)
self.model.select()
self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
def previous_page(self):
if self.current_page > 0:
self.current_page -= 1
self.update_table_view()
def next_page(self):
if self.current_page < (total_pages - 1):
self.current_page += 1
self.update_table_view()
```
在这个示例代码中,我们创建了一个QSqlTableModel,并将其设置为QTableView的模型。我们还定义了每个页面的大小,并将当前页面设置为0。
update_table_view()方法用于更新QTableView中显示的数据。它首先查询数据库中的总记录数,然后计算总页数。然后,它使用setLimit()和setOffset()方法限制查询的记录数,并调用select()方法更新模型。
previous_page()和next_page()方法分别用于在QTableView中向前或向后翻页。在这些方法中,我们检查当前页面是否小于总页面数(在下一页方法中)或大于0(在上一页方法中),然后递增或递减当前页面并更新QTableView。
这是一个简单的方法来实现在QTableView中使用分页显示数据库记录。
阅读全文