【问题标题】:QTableView how do I enter edit mode when I press enter or return button?QTableView当我按下回车或返回按钮时如何进入编辑模式?
【发布时间】:2022-01-06 23:28:01
【问题描述】:

默认情况下,您可以通过 setEditTriggers 函数设置触发器进入单元格重新激活模式。但是,输入或返回按钮没有触发器。

我试图通过重写 keyPressEvent 函数来做到这一点。但它在终端中给了我一个“编辑:编辑失败”错误。

class UTableView(QTableView):
    def __init__(self, parent=None):
        super(UTableView, self).__init__(parent)
        self.setEditTriggers(QAbstractItemView.DoubleClicked | QAbstractItemView.EditKeyPressed)

    def keyPressEvent(self, event):
        if event.type() == QEvent.KeyPress and (event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter):
            self.edit(self.currentIndex())
        super(UTableView, self).keyPressEvent(event)

解决我的问题的正确方法是什么?

【问题讨论】:

    标签: python qt pyqt pyqt5 pyside2


    【解决方案1】:

    找出我的问题所在。 问题中给出的解决方案是正确的。但是我们需要添加一个检查来查看元素是否处于编辑状态。因为当我们更改单元格中的文本后按回车键进行更改时,也会触发 keyPressEvent 并且由于之前的更改尚未完成,因此会出现错误“编辑:编辑失败”。

    最终代码:

    class UTableView(QTableView):
        def __init__(self, parent=None):
            super(UTableView, self).__init__(parent)
            self.setEditTriggers(QAbstractItemView.DoubleClicked | QAbstractItemView.EditKeyPressed)
    
        def keyPressEvent(self, event):
            if event.type() == QEvent.KeyPress and (event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter):
                if self.state() != QAbstractItemView.EditingState:
                    self.edit(self.currentIndex())
            super(QTableView, self).keyPressEvent(event)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2022-10-08
      • 1970-01-01
      • 2012-11-07
      • 2015-05-30
      • 1970-01-01
      相关资源
      最近更新 更多