Godot遍歷目錄下檔案,並建立按鈕

meny發表於2024-08-08

想用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,返回一個包含檔名的列表。功能包括:開啟目錄,遍歷目錄中的每個項,如果當前項是檔案則新增到檔案列表,最後返回檔案列表。

相關文章