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)