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 的值。
为什么会这样?
在编辑状态下按Return或Enter时,数据不会立即提交到模型。
按键事件由委托编辑器(通常是行编辑器)处理,它最终会验证或修正输入的值,最后提交数据。
如果您想知道数据何时 实际 发生变化,请连接到 itemChanged
信号。
另请注意:
- 不鼓励像这样“修补”事件处理程序,因为它通常会导致静默错误或错误处理事件(因为函数的范围不是应该处理事件的 class 的实例);您要么使用事件过滤器,要么使用升级的小部件;
- 您应该始终调用事件处理程序的基本实现,除非您完全确定不想处理它;例如,在您的情况下,您的实现完全阻止了键盘导航或通过按 Return 或 F2 进入编辑模式的可能性;
我在我的界面上使用 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 的值。
为什么会这样?
在编辑状态下按Return或Enter时,数据不会立即提交到模型。
按键事件由委托编辑器(通常是行编辑器)处理,它最终会验证或修正输入的值,最后提交数据。
如果您想知道数据何时 实际 发生变化,请连接到 itemChanged
信号。
另请注意:
- 不鼓励像这样“修补”事件处理程序,因为它通常会导致静默错误或错误处理事件(因为函数的范围不是应该处理事件的 class 的实例);您要么使用事件过滤器,要么使用升级的小部件;
- 您应该始终调用事件处理程序的基本实现,除非您完全确定不想处理它;例如,在您的情况下,您的实现完全阻止了键盘导航或通过按 Return 或 F2 进入编辑模式的可能性;