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

想用Godot做一个一站式的文本编辑器
Godot版本:4.3.rc2
核心代码:

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,返回一个包含文件名的列表。功能包括:打开目录,遍历目录中的每个项,如果当前项是文件则添加到文件列表,最后返回文件列表。

posted @ 2024-08-08 22:14  meny  阅读(106)  评论(0编辑  收藏  举报