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

news/2025/4/1 0:15:02/

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
文章来源:https://blog.csdn.net/graypigen1990/article/details/136075172
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/1346806.html

相关文章

顺序表的运用至单链表02

一. 1.顺序表是线性表的一种. 线性表的物理结构不一定是线性的 线性表的逻辑结构一定是线性的 但 顺序表的物理结构和逻辑结构都一定是线性的 2.头文件的嵌套调用会有语法错误 二. 1.链表能解决顺序表 (1).扩容导致空间浪费 (2).插入数据在头部或在中部时,要整体进行挪…

【机器学习】数据清洗之识别缺失点

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步…

git恢复rebase过程中遇到权限问题和丢失的提交

文章目录 一、检查丢失的提交是否还在 reflog 中二、创建一个新分支来恢复丢失的提交三、处理权限问题四. 使用 git fsck 查找丢失对象1、创建一个新分支来恢复该提交2、检查和合并提交 五. 介绍git中命令reflog 与 fsck1、git reflog2、git fsck使用场景 一、检查丢失的提交是…

2024.2.6日总结(小程序开发3)

页面配置 页面配置和全局配置的关系: 小程序中,app.json中的window节点,可以全局配置小程序中每个页面的窗口表现 如果某些小程序想要有特殊的窗口表现,可以用页面级别的.json配置文件实现这个需求 页面配置和全局配置冲突时&…

bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具

bpmn.js是由开源工作流引擎camunda内部组织BPMN.IO组织开发的一款基于BPMN 2.0的工作流展示、编辑的web端工具库。由于工作流引擎activiti、flowable、camunda属于同宗分流,其工作流定义格式大致相同,所以我们可以使用bpmn.js完美融合其中任一工作流引擎…

Win32 SDK Gui编程系列之--弹出式菜单

1.弹出式菜单 例如,在命令提示窗口中点击鼠标右键,会出现如下图所示的弹出菜单(下拉菜单)。 这种弹出式菜单的实现很简单。不创建菜单栏,用CreatePopupMenu函数创建的菜单是最顶端的菜单就可以了。 菜单的显示使用TrackPopupMenu函数进行。 例如,点击鼠标右键显示弹出…

【C++】引用与内联

个人主页 : zxctsclrjjjcph 文章封面来自:艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 引用2.1 引用概念2.2 引用使用场景2.3 引用特性2.4 引用和指针的区别2.5 传值、传引用效率比较2.5.1 值和引用的作为返回值类型的性能比较 3. 内联函数3.1 …

Linux中的numactl命令指南

假设我们想控制线程如何被分配到处理器核心,或者选择我们想分配数据的位置,那么numactl命令就适合此类任务。在这篇文章中,我们讨论了如何使用numactl命令执行此类操作。 目录: 介绍语法命令总结参考文献 简介 现代处理器采用…