首页 > 其他分享 >Godot遍历目录下文件,并创建按钮

Godot遍历目录下文件,并创建按钮

时间:2024-08-08 22:18:36浏览次数:14  
标签:Godot 遍历 button Global file 按钮 var dir

想用Godot做一个一站式的文本编辑器
核心:

func dir_contents(path):
	var dir = DirAccess.open(path)
	var files = []
	if dir:
		dir.list_dir_begin()
		var file_name = dir.get_next()
		while file_name != "":
			if dir.current_is_dir():
				break
			else:
				files.append(file_name)
			file_name = dir.get_next()
	else:
		print("Error。")
	return files

看看我的实现:

func _on_file_dialog_dir_selected(dir: String) -> void:
	DisplayServer.window_set_title(project_name+" - "+dir)
	print("Open dir " + dir)
	Global.data["dir"] = dir
	Global.data["recent"].append(dir)
	print("Now,we have ",Global.data["recent"].size())
	while true:
		if Global.data["recent"].size() > 10:
			print("so delete to 10")
			Global.data["recent"].remove_at(0)
			print(Global.data["recent"])
			print(Global.data["recent"].size())
		else:
			break
	%Start.visible = false
	%Edit.visible = true
	var files = dir_contents(dir+Global.data["post_dir"])
	for file in files:
		create_button(file,%Edit/PostContainer,_on_post_button_pressed,file)
	pass
func create_button(bind,child,connect,text):
	var button = Button.new()
	button.text = text
	button.pressed.connect(connect.bind(bind))
	child.add_child(button)
	var position = Vector2(0, len(buttons) * 30)
	button.clip_text = true
	print(button.size)
	button.position = position
	buttons[bind] = button
func _on_post_button_pressed(file):
	print("Button pressed for file: " + file)
	var open = Global.data["dir"]+Global.data["post_dir"]+"/"+file
	print("Open "+open)
	var post = FileAccess.open(open, FileAccess.READ)
	%Edit/MarkdownLabel.markdown_text = post.get_as_text()
func dir_contents(path):
	var dir = DirAccess.open(path)
	var files = []
	if dir:
		dir.list_dir_begin()
		var file_name = dir.get_next()
		while file_name != "":
			if dir.current_is_dir():
				break
			else:
				files.append(file_name)
			file_name = dir.get_next()
	else:
		print("Error。")
	return files

_on_file_dialog_dir_selected(dir: String) -> void: 当文件对话框目录被选择时,该函数被调用。它接收一个字符串参数dir,代表选定的目录路径。功能包括:设置窗口标题为项目名称和目录路径的组合,打印打开的目录,更新全局数据中的当前目录和最近使用目录,限制最近使用目录列表长度为10,显示和隐藏特定界面元素,遍历目录中的文件并创建对应按钮。

create_button(bind,child,connect,text): 创建一个带有特定文本的按钮,并将其添加到父节点。它接收四个参数:bind(绑定的对象),child(按钮的父节点),connect(按钮按下时调用的函数),text(按钮的文本)。功能包括:创建新按钮,设置按钮文本,连接按下事件到指定函数,将按钮添加到父节点,设置按钮的位置和文本截断。

_on_post_button_pressed(file): 当帖子按钮被按下时调用。它接收一个文件名参数file,代表被按下按钮关联的文件。功能包括:打开并读取文件内容,将文件内容设置为特定界面元素的文本。

dir_contents(path): 列出指定路径下的文件(不包括子目录)。它接收一个路径参数path,返回一个包含文件名的列表。功能包括:打开目录,遍历目录中的每个项,如果当前项是文件则添加到文件列表,最后返回文件列表。

标签:Godot,遍历,button,Global,file,按钮,var,dir
From: https://www.cnblogs.com/meny233/p/18349851

相关文章

  • C++ 根据层序遍历数组 构造二叉树
    说明该层序遍历数组中空节点会使用-1代替,即该层序遍历数组可以理解为一个完全二叉树代码利用队列实现左右子节点的存储,每次通过获取队列头部元素即为当前头节点,然后在数组中i和i+1对应该头结点下的左右子节点,如果不为-1,那么说明可以入队。structTreeNode{intval;Tree......
  • LeetCode144 二叉树的前序遍历
    前言题目:144.二叉树的前序遍历文档:代码随想录——二叉树的递归遍历编程语言:C++解题状态:基础知识不了解思路两种思路,第一是递归。递归算法有三个要素。每次写递归,都按照这三要素来写!确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就......
  • html+css 实现hover边框2边生长按钮
    前言:哈喽,大家好,今天给大家分享html+css绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • 请遍历一个数组 , 输出数组的各个元素值。
    1publicclassshuzu21{2//编写一个main方法3publicstaticvoidmain(String[]args){45//编写一个数组,输出数组的各个元素值6int[][]map={{0,0,1},{1,1,1},{1,1,3}};7//使用方法完成输出,创建MyTools对象89......
  • 【Material-UI】按钮组件中的实验性API:Loading按钮详解
    文章目录一、LoadingButton组件概述1.组件介绍2.基本用法二、LoadingButton组件的高级用法1.自定义加载指示器2.图标与加载位置三、已知问题与解决方法1.Chrome翻译工具与LoadingButton的兼容性问题四、实用性与未来展望1.应用场景2.未来展望五、总结......
  • NC 实现二叉树先序,中序和后序遍历
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。描述给定一棵二叉树,分别按照二叉树先序,中序和后序打印所有的节点。i......
  • 集合泛型,集合遍历,集合工具类
    集合泛型,集合遍历,集合工具类一.集合泛型在Java中,集合泛型(CollectionGenerics)是Java泛型(Generics)在集合框架(CollectionsFramework)中的一个重要应用。泛型提供了一种编译时类型安全检测机制,允许程序员在编译时期而不是运行时检查非法的类型。当将泛型应用于集合时,可以指定集合......
  • 集合遍历
    集合遍历目录集合遍历传统的for循环遍历,基于计数器的:迭代器遍历,Iterator:foreach循环遍历:Stream流处理传统的for循环遍历,基于计数器的:​遍历者自己在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后,停止。主要就是需要按元素的位置来读取元素......
  • 集合遍历
    集合遍历集合遍历是指访问集合中的每个元素,并对它们进行迭代处理的过程。Java集合框架提供了几种遍历集合的方法。以下是一些常见的遍历技术:使用for循环对于数组或List,可以使用传统的for循环进行遍历:List<String>list=Arrays.asList("Apple","Banana","Cherry");f......
  • leetcode200. 岛屿数量C++题解,精美图例和流程图,一题带你弄懂图的dfs遍历算法
    leetcode200.岛屿数量给你一个由‘1’(陆地)和‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例1:输入:grid=[[“1”,“1”,“1”,......