QTableWidget,停止QTableWidgetItem的编辑

Posted

技术标签:

【中文标题】QTableWidget,停止QTableWidgetItem的编辑【英文标题】:QTableWidget, Stop editing of QTableWidgetItem 【发布时间】:2018-01-03 20:20:10 【问题描述】:

我有一个包含很多项目的 QTableWidget。我想这样当我在编辑单元格时按下Return 键(与Qt.Key_Return 相同)时,它将选择并编辑下一个单元格。但是,如果我调用nextrow 函数,如果我已经在编辑QTableWidgetItem,它不会做任何事情。它在没有任何内容被编辑时工作,它将编辑选定的行。

self.table = QTablewidget()
... # Populate widget with QTableWidgetItems

def nextrow(self, row)
    column = 1
    self.table.editItem(self.table.item(row, column))

我认为没有办法真正禁用该编辑模式,它完全忽略了从设置文本到禁用编辑权限的所有内容,因为我已经在编辑它了。据我看,我也找不到任何方法来做到这一点。

【问题讨论】:

【参考方案1】:

您需要从 QTableWidget 捕获按键事件。为此,您需要继承 QTableWidget 并从内部实现更改行功能。

self.table = CustomTableWidget()
... # Populate widget with QTableWidgetItems

class CustomTableWidget(QtWidgets.QTableWidget):

    def __init__(self):
        super().__init__()

    def keyPressEvent(self, event):
        key = event.key()
        if key == QtCore.Qt.Key_Return:
            self.select_next_row()

    def select_next_row(self):
        self.setCurrentCell(self.currentRow() + 1, self.currentColumn())
        self.edit(self.currentIndex())

【讨论】:

非常感谢。我已经对它进行了子类化,但是天知道为什么,您实际上需要在调用编辑之前设置要选择的当前单元格。我用来做选择的功能,显然也不适用于这个目的......

以上是关于QTableWidget,停止QTableWidgetItem的编辑的主要内容,如果未能解决你的问题,请参考以下文章

QTableWidget,停止QTableWidgetItem的编辑

两次实例化 QStyledItemDelegate 的子类时出现“Python 已停止工作”错误

qtablewidget怎样设置表

Qt下QTableWidget的使用

QTableWidget

qtablewidget怎么设置列宽度均分窗口宽度