tree的用法


前言

tree组件用来表现有层级关系的数据结构再适合不过了。如下将介绍其简单用法。


一、tree

1.准备数据

//tree data
	treeData := map[string][]string{
		"":   {"体育", "美食"},
		"体育": {"羽毛球", "篮球", "跑步"},
		"美食": {"川菜", "粤菜"},
	}

这里需要注意:"":表示tree 根节点,必须设置的,可以不是空串。

2.创建tree

// 创建tree
	tree := widget.NewTreeWithStrings(treeData)
	// 打开所有分支
	tree.OpenAllBranches()
	// 打开指定分支
	// tree.OpenBranch("美食")

在这里插入图片描述

3. 选择事件

tree.OnSelected = func(uid widget.TreeNodeID) {
		lb.SetText(uid)
	}

二、实例

下面是一个动态的简单的文件浏览系统。

1.初始化tree

代码如下(示例):

// 创建一个空的tree组件
	tree2 := widget.NewTree(nil, nil, nil, nil)

2. 创建

func refreshTree(tree2 *widget.Tree, root string) {
	// 设置根节点
	tree2.Root = root

	// 获取子节点
	tree2.ChildUIDs = func(uid widget.TreeNodeID) (c []widget.TreeNodeID) {
		if uid == "" {
			c = getFiles(root)
		} else {
			c = getFiles(uid)
		}
		return
	}

	// 创建空节点,节点是个Label组件
	tree2.CreateNode = func(branch bool) (o fyne.CanvasObject) {
		return widget.NewLabel("")
	}

	// 给每个节点的Label组件设置文本
	tree2.UpdateNode = func(uid widget.TreeNodeID, branch bool, node fyne.CanvasObject) {
		l := node.(*widget.Label)
		l.SetText(getFileName(uid))
	}

	// 判断是否是分支节点
	tree2.IsBranch = func(uid widget.TreeNodeID) (ok bool) {
		return isDir(uid)
	}
	//重新渲染组件
	tree2.Refresh()
}

在这里插入图片描述


总结

tree是一个复杂的组件,后续我们对其扩展一些实用功能,比如节点的搜索、带复选框的节点等。

附录

源代码: https://gitee.com/gene-zhao/fyne-demo.git
更多高级用法,持续更新...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值