【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.rhkb.cn/news/254811.html

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

相关文章

6.electron之上下文隔离,预加载JS脚本

如果可以实现记得点赞分享,谢谢老铁~ Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、…

Windows11安装运行Linux(Ubuntu)

一、安装windows支持 输入windows打开界面 选择虚拟机监控程序平台、适用于linux的子系统、虚拟机平台 在 Windows 系统中,"虚拟机平台"和"虚拟机监控程序平台"是两个与虚拟化相关的功能,但它们各自有着不同的作用和用途。 虚拟机…

JAVA设计模式之代理模式详解

代理模式 1 代理模式介绍 在软件开发中,由于一些原因,客户端不想或不能直接访问一个对象,此时可以通过一个称为"代理"的第三者来实现间接访问.该方案对应的设计模式被称为代理模式. 代理模式(Proxy Design Pattern ) 原始定义是:让你能够提供对象的替代…

IT行业针对大数据的安全文件传输的重要性

在数字化浪潮的推动下,数据已成为现代社会的宝贵资源。特别是大数据,以其海量、多样化、高速增长和低价值密度的特性,对信息技术(IT)行业产生了深远影响。大数据的应用不仅推动了云计算、物联网和人工智能等领域的发展…

Vuex介绍和使用

1. 什么是Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式和库。它解决了在大型 Vue.js 应用程序中共享和管理状态的问题,使得状态管理变得更加简单、可预测和可维护。 在 Vue.js 应用中,组件之间的通信可以通过 props 和事件进行&#xff0c…

University Program VWF仿真步骤__全加器

本教程将以全加器为例,选择DE2-115开发板的Cyclone IV EP4CE115F29C7 FPGA,使用Quartus Lite v18.1,循序渐进的介绍如何创建Quartus工程,并使用Quartus Prime软件的University Program VWF工具创建波形文件,对全加器的…

机器学习-线性回归法

线性回归算法 解决回归问题思想简单,实现容易许多强大的非线性模型的基础结果具有很好的可解释性蕴含机器学习中的很多重要思想 样本特征只有一个,称为:简单线性回归 通过分析问题,确定问题的损失函数或者效用函数 通过最优化…

UDP端口探活的那些细节

一 背景 商业客户反馈用categraf的net_response插件配置了udp探测, 遇到报错了,如图 udp是无连接的,无法用建立连接的形式判断端口。 插件最初的设计是需要配置udp的发送字符,并且配置期望返回的字符串, [[instances]] targets…

Java写标准输出进度条

学Java这么久了,突发奇想写一个 进度条 玩玩,下面展示一下成功吧! Java代码实现如下 public class ProcessBar {public static void main(String[] args) {//进度条StringBuilder processBarnew StringBuilder();//进度条长度int total100;/…

2024.2.5 vscode连不上虚拟机,始终waiting for server log

昨天还好好的,吃着火锅,做着毕设,突然就被vscode给劫了。 起初,哥们跟着网上教程有模有样地删除了安装包缓存,还删除了.vscode-server,发现没卵用,之前都是搜那个弹窗报错。 后来发现原来是vsco…

问题:塑瓷后的牙冠要比完成的牙冠大() #学习方法#其他

问题:塑瓷后的牙冠要比完成的牙冠大() A.10% B.10%-15% C.15%-20% D.20%-30% E.50% 参考答案如图所示

微软AD域替代方案,助力企业摆脱hw期间被攻击的窘境

在红蓝攻防演练(hw行动)中,AD域若被攻击成功,是其中一个扣分最多的一项内容。每年,宁盾都会接到大量AD在hw期间被攻击,甚至是被打穿的企业客户。过去,企业还会借助2FA双因子认证加强OA、Exchang…

一个Vivado仿真问题的debug

我最近在看Synopsys的MPHY仿真代码,想以此为参考写个能实现PWM-G1功能的MPHY,并应用于ProFPGA原型验证平台。我从中抽取了一部分代码,用Vivado自带的仿真器进行仿真,然后就遇到了一个莫名其妙的问题,谨以此文作为debug…

Linux 本地RStudio 工具安装远程访问

前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE,并通过 Web 浏览器进行访问,从而将 RStudio IDE 的强大功能和工作效率带到基于服务器的集中式环境中。 下面介绍在Linux docker中安装RStudio Server并结合cpolar内网…

力扣231. 2 的幂(数学,二分查找,位运算)

Problem: 231. 2 的幂 文章目录 题目描述思路即解法复杂度Code 题目描述 思路即解法 思路1:位运算 1.易验证2的幂为正数; 2.易得2的幂用二进制表示只能有一个位为数字1 3.即将其转换为二进制统计其二进制1的个数 思路2:数学 当给定数n大于1时…

C语言操作符超详细总结

文章目录 1. 操作符的分类2. 二进制和进制转换2.1 2进制转10进制2.1.1 10进制转2进制数字 2.2 2进制转8进制和16进制2.2.1 2进制转8进制2.2.2 2进制转16进制 3. 原码、反码、补码4.移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符:&、|、^、~6. 逗号表达式…

LabVIEW多任务实时测控系统

LabVIEW多任务实时测控系统 面对现代化工业生产的复杂性和多变性,传统的测控系统已难以满足高效、精准、可靠的监控和控制需求。因此,开发一种基于LabVIEW的智能测控系统,能够提高生产效率,保证生产安全,是解决现代工…

12 ABC串口接收原理与思路

1. 串口接收原理 基本原理:通过数据起始位判断要是否要开始接收的数据,通过采样的方式确定每一位数据是0还是1。 如何判断数据起始位到来:通过边沿检测电路检测起始信号的下降沿 如何采样:一位数据采多次,统计得到高…

SpringBoot和SpringMVC

目录 一、springboot项目 (1)创建springboot项目 (2)目录介绍 (3)项目启动 (4)运行一个程序 (5)通过其他方式创建和运行springboot项目 二、SpringMVC…

掌握虚拟化与网络配置之道:深入浅出VMware及远程管理技巧

目录 虚拟机介绍 虚拟机的关键字 服务器架构的发展 为什么用虚拟机VMware 虚拟机和阿里云的区别 功能角度 价格因素 应用场景 优势方面 找到windows的服务管理 配置VMware 关于VMware安装的几个服务 vmware如何修改各种网络配置 关于NAT的详细信息(了解) NAT(网…