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

PySide2 QTableWidget按下Enter键无法实时获取单元格最新文本问题

问题成因
  • 你重写的keyPressEvent回调触发时机早于QTableWidget原生的编辑提交逻辑:当单元格处于编辑状态时按下回车键,你的自定义处理函数会优先执行,此时编辑框内输入的新值还没有被提交同步到对应的QTableWidgetItem对象中,读取到的自然是修改前的旧值。
  • 代码中调用setEditTriggers的操作无法触发当前编辑内容的提交,也不会终止当前的编辑状态,对取值逻辑没有帮助。
  • 第二次按下回车键时,单元格已经退出编辑状态、新值已经完成同步,因此可以读取到最新内容。
修复方案

有两种常用的修复方式,任选其一即可:

  1. 先执行父类原生的按键处理逻辑,完成内容提交后再执行自定义取值逻辑
def KeyPressed(self, event):
    # 先触发QTableWidget默认的按键处理,完成编辑内容提交
    QtWidgets.QTableWidget.keyPressEvent(self.ui.edit_table, event)
    if event.key() == QtCore.Qt.Key_Return:
        print('Enter Key Pressed')
        print(self.ui.edit_table.item(0, 1).text())
        newListValues = []
        for i in range(0, 46):
            newListValues.append(self.ui.edit_table.item(i, 1).text())
        print(newListValues)
        newListValues.clear()
  1. 取值前主动提交当前编辑的内容到对应单元格
def KeyPressed(self, event):
    if event.key() == QtCore.Qt.Key_Return:
        # 主动提交当前编辑器内容并关闭编辑状态
        if self.ui.edit_table.state() == QtWidgets.QAbstractItemView.EditingState:
            editor = self.ui.edit_table.currentIndex().widget()
            self.ui.edit_table.commitData(editor)
            self.ui.edit_table.closeEditor(editor, QtWidgets.QAbstractItemDelegate.NoHint)
        print('Enter Key Pressed')
        print(self.ui.edit_table.item(0, 1).text())
        newListValues = []
        for i in range(0, 46):
            newListValues.append(self.ui.edit_table.item(i, 1).text())
        print(newListValues)
        newListValues.clear()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:54:04