如何在PySide2的QTableView单元格中设置数据(含索引获取方法)
在PySide2的QTableView中设置单元格值的正确做法
你已经实现了TableModel,也拿到了目标单元格的行和列,现在卡壳在怎么生成对应的QModelIndex传给setData方法对吧?其实很简单,直接调用模型的createIndex()方法就能生成所需的索引对象。
具体步骤:
创建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)修复模型的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
相关产品推荐
相关产品推荐

