使用 Tab 键在 QTablewidget 中添加一行

Posted

技术标签:

【中文标题】使用 Tab 键在 QTablewidget 中添加一行【英文标题】:Using Tab key to add a row in QTablewidget 【发布时间】:2021-01-11 02:27:31 【问题描述】:

我正在开发一个食谱应用程序,使用 QTableWidget 来添加食谱的成分。我使用按钮添加一行以插入新成分。这很好用,但像许多现有应用程序一样,当最后一行中的最后一列具有焦点时,我想使用 tab 键添加新行。我想我必须确定按下的 tab 键以及焦点所在的列和行,但我不清楚如何做到这一点。

【问题讨论】:

【参考方案1】:

最简单的方法是子类化表格小部件并实现closeEditor() 函数,只要委托发出信号表明编辑器将要关闭,并提出关闭后要执行的下一步操作,就会调用该函数。 使用 tab 键,使用了EditNextItem 提示,因此检查该标志就足够了,确保当前索引是否是最后一行的最后一列,然后在调用之前添加一行 before基本实现方法:

class TableWidget(QtWidgets.QTableWidget):
    def closeEditor(self, editor, hint):
        if hint == QtWidgets.QAbstractItemDelegate.EditNextItem:
            current = self.currentIndex()
            if (current.row() == self.rowCount() - 1 and 
                current.column() == self.columnCount() - 1):
                    self.insertRow(self.rowCount())
        super().closeEditor(editor, hint)

【讨论】:

感谢您的意见。我想我明白,但需要一点研究。我对代表很薄弱。一个问题,为什么在closeEditor函数结束时调用的super()函数会被覆盖? @Liamdale 上面的代码使用表格小部件的默认委托。 closeEditor 的基本实现尝试在 next 可能的单元格上开始编辑,如果您没有在 before 创建新行,它显然无法开始新的编辑在下一行,因为它还不存在。

以上是关于使用 Tab 键在 QTablewidget 中添加一行的主要内容,如果未能解决你的问题,请参考以下文章

Python PyGOobject treeview:使用 Tab 键在单元格之间移动后确认编辑

Pyqt如何获取文本为空的QTableWidget项目对象

如何禁止tab键在对话框内的编辑控件和按钮之间切换焦点?

Qt 杂记——QTableWidget列表添加删除(备份)

怎样解决回车Tab键在DBGrid表单元格的移动问题?

Pyqt5 QTableWidget自定义键盘功能