回答ありがとうございます。
返信が遅くなり大変申し訳ありません。
おぉ…私がやりたい操作そのものなのです!
ですが、どのようにアタッチ?するのかが分かりません。
ここ1週間色々と試行錯誤したのですが
Tab表示が出ずに
tab_scene.tab_text = “たぶ” + str(i+1)
でstringが…というようなエラーが出て止まったりします。
初歩的な質問で大変申し訳ありませんが
適用方法を教えていただけますでしょうか。
ファイルについて
UIフォルダににtab_1.tscnを作成
ScenesフォルダにMenuScence.tscnを作成
【scenes】フォルダ
◆MenuScence.tscn ←ここに頂いたソースを適用する?
TabContainer
ScrollContainer
HBoxContainer
【UI】フォルダ
◆tab_1.tscn
TabCOntainer
ScrollContainer
HBoxContainer
私が記載したサンプルのソース
◆MenuScence.tscn
TabContainer
ScrollContainer
HBoxContainer
添付した画像のものは、MenuScenceの
TabContainerに以下スクリプトを適用しています(ChatGPTと協力して作ったもの)
extends TabContainer
# スクロールコンテナの名前リスト
var scroll_container_names = [
"Body", "Eye", "Front_Hair", "Back_Hair"
]
# アイコンが格納されているベースフォルダ
var icon_base_path = "res://icon_test/"
func _ready():
for scroll_container_name in scroll_container_names:
# ScrollContainerを作成
var scroll_container = ScrollContainer.new()
scroll_container.name = scroll_container_name
scroll_container.custom_minimum_size = Vector2(600, 0) # ScrollContainerの横幅を600pxに固定
# スクロール設定
scroll_container.get_h_scroll_bar().visible = false
scroll_container.get_v_scroll_bar().visible = true
scroll_container.get_v_scroll_bar().custom_minimum_size.x = 20
# GridContainerを作成
var grid_container = GridContainer.new()
grid_container.columns = 5
grid_container.custom_minimum_size = Vector2(600, 0) # 横幅を600pxに固定
grid_container.size_flags_horizontal = Control.SIZE_SHRINK_CENTER # 中央揃えに変更
grid_container.size_flags_vertical = Control.SIZE_SHRINK_CENTER # 中央揃えに変更
# フォルダから画像を取得し、ボタンを生成
var dir_path = icon_base_path + scroll_container_name
var dir = DirAccess.open(dir_path)
var files = []
var null_file_path = ""
if dir:
dir.list_dir_begin()
var file_name = dir.get_next()
while file_name != "":
if file_name.ends_with(".png"): # PNGファイルのみ処理
if file_name == "null.png":
# null.pngの場合は特別に保存
null_file_path = dir_path + "/" + file_name
else:
files.append(file_name)
file_name = dir.get_next()
dir.list_dir_end()
# null.pngを最優先で処理
if null_file_path != "":
_create_button(scroll_container_name, null_file_path, grid_container)
# 残りのファイルを処理
for file_name in files:
var file_path = dir_path + "/" + file_name
_create_button(scroll_container_name, file_path, grid_container)
# ScrollContainerにGridContainerを追加
scroll_container.add_child(grid_container)
# TabContainerにScrollContainerを追加
add_child(scroll_container)
# タブのタイトルを設定
#set_tab_title(get_child_count() - 1, scroll_container_name)
#var tabiconpath=tab_icon_path + scroll_container_name + "Icon.png"
#set_tab_title(get_child_count() - 1, "") # 3番目のタブにアイコンを設定
#set_tab_icon(get_child_count()- 1,load(tabiconpath))
# ボタン生成と接続を行う関数
func _create_button(tab_name, file_path, grid_container):
# 拡張子を除いたファイル名を取得
var base_name = file_path.get_file().substr(0, file_path.get_file().rfind("."))
var button = Button.new()
button.text = "" # ボタンのテキストを空にする
# ボタンのサイズを110x110に固定
button.set_custom_minimum_size(Vector2(110, 110))
# アイコンを設定
var icon_texture = load(file_path)
button.icon = icon_texture
button.icon_alignment = HORIZONTAL_ALIGNMENT_CENTER
# ボタンにクリック処理を接続、タブ名と拡張子なしのファイル名を渡す
button.connect("pressed", Callable(self, "_on_button_pressed").bind(tab_name, base_name))
grid_container.add_child(button)
# ボタンがクリックされたときに呼ばれる関数
func _on_button_pressed(tab_name, base_name):
# タブ名と拡張子なしのファイル名を出力
print("Tab: ", tab_name, ", File: ", base_name)