TableWidget "Enter" 按键当前文本

TableWidget "Enter" keypressed current text

我在我的界面上使用 python、Pyside2。

我有一个 tableWidget,我想在按回车键后获取当前文本。 所以我有以下代码:

我在当前打开的页面中添加以下功能:

self.ui.edit_table.keyPressEvent = self.KeyPressed

然后我添加以下功能:

def KeyPressed(self, event):
    if event.key() == QtCore.Qt.Key_Return:
        print('Enter Key Pressed')
        self.ui.edit_table.setEditTriggers(QtWidgets.QTableWidget.CurrentChanged)
        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()

当我更改值并按回车键时,我看到 Enter Key Pressed 但看不到新值。但是,如果我在没有任何更改的情况下再按一次回车按钮,我可以在 newListValue 中看到新值。为什么新值显示延迟?

例如 item(0, 1) 的值为 5,当我将此值更改为 12 并按回车时,我在 print(self.ui.edit_table.item(0, 1).text()) 中看不到任何变化,但是当我再次按回车时,我可以看到 12 的值。

为什么会这样?

在编辑状态下按ReturnEnter时,数据不会立即提交到模型。

按键事件由委托编辑器(通常是行编辑器)处理,它最终会验证或修正输入的值,最后提交数据。

如果您想知道数据何时 实际 发生变化,请连接到 itemChanged 信号。

另请注意:

  • 不鼓励像这样“修补”事件处理程序,因为它通常会导致静默错误或错误处理事件(因为函数的范围不是应该处理事件的 class 的实例);您要么使用事件过滤器,要么使用升级的小部件;
  • 您应该始终调用事件处理程序的基本实现,除非您完全确定不想处理它;例如,在您的情况下,您的实现完全阻止了键盘导航或通过按 ReturnF2 进入编辑模式的可能性;