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

如何在PySide2的QTableView单元格中设置数据(含索引获取方法)

在PySide2的QTableView中设置单元格值的正确做法

你已经实现了TableModel,也拿到了目标单元格的行和列,现在卡壳在怎么生成对应的QModelIndex传给setData方法对吧?其实很简单,直接调用模型的createIndex()方法就能生成所需的索引对象。

具体步骤:

  1. 创建QModelIndex对象
    你可以通过模型的createIndex(row, column)方法生成目标单元格的索引,因为表格模型是顶层模型,父索引直接用默认的空QModelIndex()就行(不需要额外传参,方法默认会处理)。

    在你的MainWindow代码里,这样写就可以:

    row, column = a_function_that_outputs_the_row_and_column_of_the_cell_to_edit()
    model = self.Table.model()
    # 创建目标单元格的索引
    target_index = model.createIndex(row, column)
    # 调用setData设置值,替换your_value为你要设置的实际值
    model.setData(target_index, your_value)
    
  2. 修复模型的setData方法(关键)
    看你当前的TableModel代码,setData方法修改数据后没有发出数据变化的信号,这会导致视图无法及时更新单元格显示。你需要在修改数据后发出dataChanged信号,让QTableView知道要重新渲染这个单元格:

    def setData(self, index, value, role = QtCore.Qt.EditRole):
        if value is not None and role == QtCore.Qt.EditRole:
            self._items[index.row()][index.column()] = value
            # 发出信号通知视图更新该单元格
            self.dataChanged.emit(index, index)
            return True
        return False
    

    这个信号是MVC模式里模型和视图通信的关键,没有它的话,即使模型数据改了,界面上也看不到变化。

这样就能顺利设置QTableView单元格的值啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:33:13