import itertools
import datetime
from 载入初始化 import *
from 号码载入后界面 import *
class NumGroupModel(QAbstractTableModel):
PAGE_SIZE = 1000 # 每页数据行数
def __init__(self, header_labels,data=None):
super().__init__()
self._data = data or []
self._page_start = -1 # 当前页起始行号
self._page_end = -1 # 当前页结束行号
self.header_labels = header_labels
def headerData(self, section, orientation, role=Qt.DisplayRole):
if role == Qt.DisplayRole and orientation == Qt.Horizontal:
return self.header_labels[section]
return None
# def sort(self, column, order=Qt.AscendingOrder):
# self.layoutAboutToBeChanged.emit()
# self._data.sort(key=lambda x: x[column], reverse=(order == Qt.DescendingOrder))
# self.layoutChanged.emit()
def sort(self, column, order=Qt.AscendingOrder):
self.layoutAboutToBeChanged.emit()
self._data.sort(key=lambda x: float(x[column]), reverse=(order == Qt.DescendingOrder))
self.layoutChanged.emit()
def rowCount(self, parent=None):
return len(self._data)
def columnCount(self, parent=None):
return 7 # 表格列数
def data(self, index, role=Qt.DisplayRole):
if not index.isValid():
return QVariant()
row = index.row()
col = index.column()
if role == Qt.DisplayRole:
return str(self._data[row][col])
if role == Qt.TextAlignmentRole:
return Qt.AlignCenter
if role == Qt.FontRole:
font = QFont("Arial", 12) # 修改为需要的字体和字号
return font
# if role == Qt.BackgroundRole:
# if col == 1: # 要设置背景色的列索引
# return QColor(Qt.lightGray)
# if role == Qt.ForegroundRole:
# if col == 2: # 要设置前景色(文本颜色)的列索引
# return QColor(Qt.red)
elif role == Qt.BackgroundRole:
if row % 2 == 0:
return QColor(Qt.lightGray)
return QVariant()
def setPage(self, page):
self.beginResetModel() # 重置模型,清空所有数据
self._page_start = page * NumGroupModel.PAGE_SIZE
self._page_end = self._page_start + NumGroupModel.PAGE_SIZE
self.endResetModel() # 更新模型,提取新页数据
def fetchMore(self, index):
if not index.isValid():
return
row = index.row()
if row < self._page_end:
return
current_page = row // NumGroupModel.PAGE_SIZE
self.setPage(current_page)
def canFetchMore(self, index):
if not index.isValid():
return False
row = index.row()
if row >= len(self._data) - 1:
return False
return True
一个很好玩的类QAbstractTableModel
最新推荐文章于 2024-04-22 17:56:57 发布