QAbstractTableModel的使用

342 阅读2分钟

pyside6的QAbstractTableModel类在实例化时必须重写rowCount()、columnCount()和data()三个方法,标题头由headerData()方法提供。

rowCount([parent=QModelIndex()])方法 返回表格行数

    def rowCount(self,parent:QModelIndex) -> int:
        return 2

columnCount([parent=QModelIndex()])方法 返回表格列数

    def columnCount(self, index: QModelIndex) -> int:
        return 6

headerData(section, orientation[, role=Qt.DisplayRole])方法 返回行或列标题头,orientation的值判断行还是列,根据role判断返回内容

    header_data = ['第一列','第二列','第三列','第四列','第五列','第六列']
    def headerData(self, section: int, orientation: Qt.Orientation, role: Qt.ItemDataRole) -> Any:
        if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal:
            return header_data[section]

data(index[, role=Qt.DisplayRole]) 根据role的值,返回表格内容,包括值、字体颜色、单元格颜色等

role用途
DisplayRole主要用于以文本的形式显示数据。
EditRole可用于文本数据的编辑。
DecorationRole可以将数据通过图标的方式呈现出来。
ToolTipRole实现当鼠标处于选中的数据时,显示出数据的相关提示。
StatusTipRole在状态栏显示提示的数据
WhatsThisRole可以通过选中数据摁下快捷键shift+F1来显示提示。
FontRole可以改变数据的字体。
TextAlignmentRole可以将文本的位置进行居中、居左居右调整。
BackgroundColorRole可以改变背景色。
TextColorRole设置文字颜色
ForegroundRole可以改变前景色
CheckStateRole在某列中设置了CheckStateRole角色后,设置的列则可以显示出一个CheckBox。
AccessibleTextRole用于辅助功能和插件扩展的文本(如屏幕阅读器)
AccessibleDescriptionRole用于无障碍项目的描述
SizeHintRole可以提示相应大小
InitialSortOrderRole标题视图初始排序顺序
UserRole用于应用程序的特定目的(自己定义用途)。用户自己决定使用什么数据,如何处理数据。
    table_data = [['1-1','1-2','1-3','1-4','1-5','1-6'],['2-1','2-2','2-3','2-4','2-5','2-6']]
    def data(self, index: QModelIndex, role: Qt.ItemDataRole) -> Any:
        if role == Qt.ItemDataRole.DisplayRole:
            return table_data[index.row()][index.column()]