【Godot4.2】文件系统自定义控件 - FileSystemTree

FileSystemTree

B站【Godot4.2】文件系统自定义节点 - FileSystemTree

概述

在Godot设计编辑器插件或应用程序时,可能需要涉及文件系统的显示,比如文件夹或文件的树形列表。

我们可以用Godot的Tree控件快速书写相应的功能,但是为了复用到不同的项目,最好是设计为自定义节点。

FileSystemTree就是一个专门显示文件夹结构的树控件,扩展自Godot的Tree控件。基于Godot4.2版本实现。

它的设计依托于我在Godot3.5版本时的设计思路,并摒弃了场景元件的思路,而采用纯粹的自定义节点–一种特殊的自定义类,这样就只需要一个.gd的代码文件,你就可以复用到任何需要的项目。

而且它也摒弃了依赖的静态函数库,而是一切自给自足,所以单独使用是完全没有问题的。
在这里插入图片描述

完整代码

以下是完整代码,你至于要将其拷贝到你的项目中,可以起名叫"FileSystemTree.gd"。

然后通过添加节点,搜索Tree或FileSystemTree就可以找到并添加它了。

在这里插入图片描述

# =============================================
# 名称:FileSystemTree
# 类型:自定义节点(扩展控件)
# 描述:专用于显示某文件夹结构的Tree控件
# 作者:巽星石
# Godot版本:v4.2.1.stable.official [b09f793f5]
# 创建时间:20242720:20:45
# 最后修改时间:20242723:48:19
# =============================================@tool
extends Tree
class_name FileSystemTree## 要显示的文件夹根目录
@export_global_dir var dir_path:String:set(val):dir_path = valreload()@export_group("icon")
## 文件夹图标
@export var dir_icon:Texture2D:set(val):dir_icon = valreload()## 文件图标
@export var file_icon:Texture2D:set(val):file_icon = valreload()@export_group("set")
## 支持的文件后缀名列表,可以写点也可以不写
@export var file_filters:Array[String]:set(val):file_filters = valreload()## 强制显示所有类型的文件,忽略file_filters的设置
@export var show_all_file:bool = false:set(val):show_all_file = valreload()# ========================= 方法 =========================
# 重新加载
func reload():clear()# 将根目录设定为根节点var root = create_item()root.set_text(0,dir_path.replace("/","//"))root.set_icon(0,dir_icon)# 加载子文件夹和子文件load_dir(dir_path,root)# 加载指定根目录下的文件夹和文件
func load_dir(path:String,p_node:TreeItem = null):# 1.加载子文件夹列表var dirs = DirAccess.get_directories_at(path)for dir in dirs:var itm = create_item(p_node)itm.set_text(0,dir)itm.set_icon(0,dir_icon)# 1.1 递归子文件夹load_dir("%s/%s" % [path,dir],itm)# 2.加载子文件列表var files = DirAccess.get_files_at(path)for file in files:if show_all_file: # 强制显示所有类型的文件var itm = create_item(p_node)itm.set_text(0,file)itm.set_icon(0,file_icon)else:             # 只显示相应后缀名的文件for filter in file_filters:filter = filter if filter.begins_with(".") else "." + filterif file.ends_with(filter):var itm = create_item(p_node)itm.set_text(0,file)itm.set_icon(0,file_icon)# 返回当前选中项在Tree中的完整路径
func get_rel_path(item:TreeItem)-> String:var _path =""if item.get_parent(): # 有父节点# 递归父节点_path = get_rel_path(item.get_parent()) + "/" + item.get_text(0)else:# 根节点_path = item.get_text(0)return _path

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/459978.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

戴上HAUWEI WATCH GT 4,解锁龙年新玩法

春节将至,华为WATCH GT 4作为一款颜值和实力并存的手表,能为节日增添了不少趣味和便利。无论你是钟情于龙年表盘或定制属于自己的表盘,还是过年用来抢红包或远程操控手机拍全家福等等,它都能成为你的“玩伴”。接下来,…

【新书推荐】7.1 do while语句

本节必须掌握的知识点: 示例二十二 代码分析 汇编解析 ■do while语句其语法形式: do{ 语句块; }while(表达式) ■语法解析: ●执行do循环体内的语句块; ●判断while语句里的表达式,表达式为真继续下次循环&#…

【FPGA开发】Modelsim和Vivado的使用

本篇文章包含的内容 一、FPGA工程文件结构二、Modelsim的使用三、Vivado的使用3.1 建立工程3.2 分析 RTL ANALYSIS3.2.1 .xdc约束(Constraints)文件的产生 3.3 综合 SYNTHESIS3.4 执行 IMPLEMENTATION3.5 烧录程序3.6 程序固化3.6.1 SPI约束3.6.2 .bin文…

Java线程是怎么实现run方法的执行的呢?【 多线程在JVM中的实现原理剖析】

Java线程是怎么实现run方法的执行的呢?【 多线程在JVM中的实现原理剖析】 查看naive state0 方法JVM_StartThread 方法创建操作系统线程操作系统线程执行 本文转载-极客时间 我们知道Java线程是通过行start()方法来启动的,线程启动后会执行run方法内的代…

服务器安装Docker (centOS)

1. 卸载旧版本的Docker(如果有) 首先,如果您的系统上安装了旧版本的Docker,需要将其卸载。Docker的旧版本称为docker或docker-engine。使用以下命令来卸载旧版本: sudo yum remove docker \ docker-client \ docker-…

假期作业 6

1.C语言中,运算对象必须是整型数的运算符是 A 。 A、% B、/ C、%和/ D、* 2.若有关系x≥y≥z,应使用 A C语言表达式。 A、(x>y)&&(y>z) B、(x>y)AND(y>z) C、(x>y>z) D、(x>y)&(y>z) 3&…

Ubuntu安装SVN服务并结合内网穿透实现公网访问本地存储文件

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&…

C语言的循环结构

目录 前言 1.三种循环语句 1.while循环 2.for循环 2.1缺少表达式的情况 3.do while循环 2.break语句和continue语句 2.1在while循环中 2.2在for循环中 2.3在do while 循环中 3.循环的嵌套 4.go to语句 前言 C语⾔是结构化的程序设计语⾔,这⾥的结构指的是…

自然语言处理(NLP)——使用Rasa创建聊天机器人

1 基本概念 1.1 自然语言处理的分类 IR-BOT:检索型问答系统 Task-bot:任务型对话系统 Chitchat-bot:闲聊系统 1.2 任务型对话Task-Bot:task-oriented bot 这张图展示了一个语音对话系统(或聊天机器人)的基本组成部分和它们之间的…

C# 实现微信自定义分享

目录 需求与调整 代码实现 获取令牌 生成合法票据 获取有效签名 客户端准备 客户端实现 小结 需求与调整 在微信中打开网页应用后,可以选择将地址发送给朋友进行分享,如下图: 在实际的应用中,我们可能不是简单的将该网页…

深度学习的新进展:解析技术演进与应用前景

深度学习的新进展:解析技术演进与应用前景 深度学习,作为人工智能领域的一颗璀璨明珠,一直以来都在不断刷新我们对技术和未来的认知。随着时间的推移,深度学习不断迎来新的进展,这不仅推动了技术的演进,也…

ChatGPT高效提问—prompt常见用法(续篇三)

ChatGPT高效提问—prompt常见用法(续篇三) 1.1 多选项 ​ 多选项技术为模型提供了一个清晰的问题或任务,并附带一组预先定义的潜在答案。这种方法在生成仅限于特定选项集的文本方面表现出色,适用于问答、文本补全和其他任务。利…