别去A 2022-12-27 18:32 采纳率: 0%
浏览 151
已结题

element tree怎么在父节点选中后,他的子节点设置disabled

要求就是懒加载,父节点选中后,子节点不能再选择,然后只返回父节点的值,父节点可以多选!重点是懒加载!

  • 写回答

7条回答 默认 最新

  • |__WhoAmI__| 2022-12-27 18:41
    关注
    获得1.80元问题酬金

    1、在父节点的选择事件中添加代码,用于禁用父节点的子节点。
    例如可以在父节点的 treeview.selection_set() 事件中添加代码,用于获取选中的父节点,并将其子节点设置为不可选:

    def on_parent_select(event):
        # 获取选中的父节点
        parent = treeview.selection()[0]
        # 获取父节点的子节点
        children = treeview.get_children(parent)
        # 将子节点设置为不可选
        for child in children:
            treeview.item(child, state=tk.DISABLED)
    
    # 为父节点的选择事件绑定事件处理函数
    treeview.bind('<<TreeviewSelect>>', on_parent_select)
    

    2、在父节点的选择事件中添加代码,用于返回父节点的值。
    可以使用 treeview.item() 方法获取选中的父节点的相关信息,然后返回父节点的值:

    def on_parent_select(event):
        # 获取选中的父节点
        parent = treeview.selection()[0]
        # 获取父节点的值
        value = treeview.item(parent)['values'][0]
        print(value)
    
    # 为父节点的选择事件绑定事件处理函数
    treeview.bind('<<TreeviewSelect>>', on_parent_select)
    

    3、如果希望父节点可以多选,可以在创建 Treeview 组件时使用 selectmode 参数设置选择模式,可以使用以下代码创建 Treeview 组件:

    treeview = tk.Treeview(root, selectmode='extended')
    

    在这种情况下,用户可以使用鼠标或者键盘按住 Ctrl 键多选父节点。

    同时需要在父节点的选择事件中修改代码,使得在多选父节点时只返回最后一个被选中的父节点的值:

    def on_parent_select(event):
        # 获取选中的父节点
        parent = treeview.selection()[-1]
        # 获取父节点的值
        value = treeview.item(parent)['values'][0]
        print(value)
    
    # 为父节点的选择事件绑定事件处理函数
    treeview.bind('<<TreeviewSelect>>', on_parent_select)
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月4日
  • 修改了问题 12月27日
  • 创建了问题 12月27日