certflow.widgets.data_table 源代码
"""表格初始化封装。
把各视图手写重复的「``setHorizontalHeaderLabels`` + 选择模式 + resize 策略」抽成
一个 ``DataTable``。``columns`` 既可为表头字符串列表,也可为 ``(表头, 字段)`` 元组,
后续可平滑过渡到配置驱动的列元数据。
"""
from __future__ import annotations
from PySide6.QtWidgets import (
QAbstractItemView,
QHeaderView,
QTableWidget,
)
[文档]
class DataTable(QTableWidget):
"""开箱即用的只读单选表格。
用法::
table = DataTable(["ID", "名称", "状态"])
# 或 table = DataTable([("ID", "id"), ("名称", "name")])
"""
def __init__(
self, columns: list[str] | list[tuple[str, str]] | None = None, parent=None
) -> None:
super().__init__(parent)
if columns:
self.set_columns(columns)
[文档]
def set_columns(self, columns: list[str] | list[tuple[str, str]]) -> None:
"""根据列元数据设置表头与默认交互行为。"""
headers = [c if isinstance(c, str) else c[0] for c in columns]
self.setColumnCount(len(headers))
self.setHorizontalHeaderLabels(headers)
self.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
self.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
self.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
self.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Interactive)
self.horizontalHeader().setStretchLastSection(True)