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
相关产品推荐
相关产品推荐

