You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide2子类化QSqlTableModel重写data方法如何避免递归深度错误

PySide2 QSqlTableModel秒数字段格式化问题

我有一个已稳定运行一年的PySide2生产应用,通过QSqlTableView展示QSqlTableModel的数据。其中三个字段存储原始秒数(例如6282代表六千多秒),需要将这三个字段在表格中的显示效果,以及导出到Word文档时的格式改为h:mm:ss格式。

我尝试子类化QSqlTableModel并重写data方法来实现格式化,但在获取原始字段值时遇到瓶颈——所有尝试的方式都会触发最大递归深度错误,因为这些操作最终会反复调用重写的data方法。

相关代码如下:

class myQSqlTableModel(PySide2.QtSql.QSqlTableModel):
    def __init__(self, db: QSqlDatabase):
        super().__init__()
        self.DB = db

    def data(self, index, role):
        if not index.isValid():
            return None
        # ********** 瓶颈位置 ***************
        # 以下尝试均触发递归错误
        # self.selectRow(index.row())
        # val = self.record(index.row()).value(index.column())
        # val = index.sibling(index.row(), index.column())
        # item = self.itemData(index)
        # for key in item:
        #     print(f"key is {key}, value is {item[key].ToString()}")

        # QAbstractTableModel示例会调用内部存储的二维列表获取值,但QSqlTableModel没有类似的直接内部结构
        # *********** 瓶颈注释结束 ***********

        if role==Qt.ItemDataRole.DisplayRole:
            # 将指定字段的秒数格式化为h:mm:ss
            col_name = self.headerData(index.column(), Qt.Horizontal, Qt.ItemDataRole.DisplayRole)
            if col_name in ['start', 'end', 'duration']:
                x = val
                s = x % 60
                m = (x // 60) % 60
                h = x // 3600
                return "%01d:%02d:%02d" % (h, m, s)
            else:
                return val
        return None

class Ui_ExportWindow(QMainWindow, Ui_ExportWindow):
    def __init__(self, DB):
        super().__init__()
        self.setupUi(self)
        self.DB = DB
        self.dbFile = settings['dbFile']
        self.doc_folder = settings['export_folder']

# 跳过无关代码

# 配置QTableView关联自定义模型
self.umodel = myQSqlTableModel(self.DB)

我已经搜索了两天相关资料,但大多是关于样式设置(如高亮、字体)的内容,很少有关于将整数字段转换为格式化字符串的案例。希望能得到解决当前递归问题的建议,或者是否有其他替代方案实现需求。

内容的提问来源于stack exchange,提问作者Persistent at Python

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:41:06