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

PyQt QStandardItemModel:如何将行数据读取为列表?

用QStandardItemModel快速读取整行数据的简洁实现

在PyQt里用QStandardItemModel的appendRow()(你提到的append(some_list)应该是指传入列表形式的QStandardItem调用appendRow())添加行很便捷,但官方确实没提供直接读取整行数据的row()方法,以下是几种简洁的实现方式:

工具函数实现

写一个通用工具函数,传入模型和行号就能返回整行数据的列表:

def get_row_data(model, row_num):
    row_data = []
    col_count = model.columnCount()
    for col in range(col_count):
        # 获取对应单元格的item,空项返回空字符串
        item = model.item(row_num, col)
        row_data.append(item.text() if item else "")
    return row_data

利用QModelIndex的data方法

如果不想依赖QStandardItem(比如模型可能被多视图共享),可以直接用模型的data()方法:

def get_row_data(model, row_num):
    return [
        model.data(model.index(row_num, col)) or ""
        for col in range(model.columnCount())
    ]

在控件事件中调用

比如在QListView的点击事件里,拿到选中的QModelIndex后直接调用:

def on_list_view_clicked(index):
    # index是点击触发的QModelIndex对象
    row_data = get_row_data(index.model(), index.row())
    print("当前行数据:", row_data)

一行极简写法

如果追求代码紧凑,用lambda表达式封装:

get_row_data = lambda m, r: [m.data(m.index(r, c)) or "" for c in range(m.columnCount())]

内容的提问来源于stack exchange,提问作者banjo bill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:22:40