为什么QTreeView中的编辑是由其他触发器启动而不是我启用的?

时间:2014-11-27 11:11:38

标签: qt python-3.x pyqt qt5 pyqt5

我在SelectedClicked中仅启用了QTreeView修改触发器,但项目编辑(通过edit方法)仍然因其他原因而被触发(例如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_()

1 个答案:

答案 0 :(得分:2)

无论您使用什么EditTrigger,都将始终调用

编辑。但是,根据您指定的触发器,创建或不创建编辑器的编辑槽作业,以及返回true或false(请参阅Qt Documentation)。在您的代码中,编辑不执行任何操作(并且由于未创建编辑器,因此不会编辑该项目)。尝试拨打super().edit(self, index, trigger, event)

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