为什么QTreeView中的编辑会由我启用的触发器以外的其他触发器启动?

为什么QTreeView中的编辑会由我启用的触发器以外的其他触发器启动?,qt,python-3.x,pyqt,qt5,pyqt5,Qt,Python 3.x,Pyqt,Qt5,Pyqt5,我只在中启用了编辑触发器,但由于其他原因(例如,CurrentChanged),仍会触发项目编辑(通过该方法)。为什么其他触发器处于活动状态 有关示例,请参见下面的程序,单击树项目时,您应该会看到,由于几个不同的原因触发了编辑: from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * class TreeView(QTreeView): def __init__(self):

我只在中启用了编辑触发器,但由于其他原因(例如,
CurrentChanged
),仍会触发项目编辑(通过该方法)。为什么其他触发器处于活动状态

有关示例,请参见下面的程序,单击树项目时,您应该会看到,由于几个不同的原因触发了编辑:

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *


class TreeView(QTreeView):
    def __init__(self):
        super().__init__()
        self.setEditTriggers(self.SelectedClicked)

        self.__model = QStandardItemModel()
        self.__model.appendRow([QStandardItem('Item 1')])
        self.__model.appendRow([QStandardItem('Item 2')])
        self.setModel(self.__model)

    def edit(self, index, trigger, event):
        print('Edit index {},{}, trigger: {}'.format(index.row(), index.column(), trigger))
        return False


app = QApplication([])
w = TreeView()
w.show()
app.exec_()

无论使用什么EditTrigger,都将始终调用edit。但是,根据指定的触发器,创建或不创建编辑器以及返回true或false(请参阅)都是编辑槽作业。在代码中,edit不执行任何操作(由于未创建编辑器,因此不会对项目进行编辑)。尝试调用
super()。编辑(self、index、trigger、event)


你是说,
edit
被调用独立于
editTriggers()
,但是
edit
忽略了未选择的触发器?是的,据我所知,基本上就是这样。
def edit(self, index, trigger, event):
    res = super().edit(index, trigger, event)
    print('Edit {},{}, trigger: {}, accepted: {}'.format(index.row(), index.column(), trigger, res))
    return res