QTreeView 限制特定的深度、特定深度下的列 是否可以编辑

QTreeView 限制特定的深度、特定深度下的列 是否可以编辑

#
#   C_TreeView
#  在QTreeView基础上增加限制特定深度、特定列是否可以编辑
#
class C_TreeView(QTreeView):
    def __init__(self, parent=None):
        QTreeView.__init__(self, parent)
        
        # 设置可以编辑的 深度  和  列
        # dict,  depth:int,column:list
        self.c_allow_edit = dict()
        
    
    #
    # 设置可以编辑的 深度  和  列
    # allow_edit :dict,
    # key:深度,  大于0的整数
    # value :每个深度下可以编辑的多个列, 列编号从0开始
    def c_setAllowEdit(self, allow_edit):
        
        self.c_allow_edit = allow_edit
        
    def edit(self, index, trigger, event):
        
        args = [index, trigger, event]        
        path = self.indexToPath(index)
        depth = len(path)
        columnIndex = index.column()
        
        #return_value = QTableView.edit(self, *args)
        #return_value =super(QTreeView, self) .edit( *args)
        
        if event is not None:
            # 2:鼠标的按下,3:鼠标的释放
            # 4:鼠标的双击
            # 如果是双击,判断 深度  和 列  是否可以编辑
            event_type = event.type()
            if event_type ==4:
                allow_columns = self.c_allow_edit.get(depth)
                if allow_columns is None:
                    return False
                if columnIndex not in allow_columns:
                    return False
                    
            
        return_value =super(QTreeView, self) .edit( *args) 
        return return_value
原文地址:https://www.cnblogs.com/ribavnu/p/4971963.html