以下は『序列の連鎖(セイント・インデクシング)』の最新版ソースコード全文です:
import os
import tkinter as tk
from tkinter import filedialog, messagebox
class FolderMakerApp:
def __init__(self, root):
self.root = root
self.root.title("フォルダ作成ツール - 序列の連鎖(セイント・インデクシング)")
self.default_folder_count = 10
self.max_folder_limit = 100
# 対象フォルダ
self.path_label = tk.Label(root, text="対象フォルダ:")
self.path_label.pack(anchor='w', padx=10, pady=(10, 0))
path_frame = tk.Frame(root)
path_frame.pack(fill='x', padx=10)
self.path_entry = tk.Entry(path_frame, width=50)
self.path_entry.pack(side='left', expand=True, fill='x')
tk.Button(path_frame, text="参照", command=self.browse_folder).pack(side='left', padx=5)
# サブフォルダ構成
tk.Label(root, text="作成するサブフォルダ(改行区切り、階層は \\ で指定):").pack(anchor='w', padx=10, pady=(10, 0))
self.subfolder_text = tk.Text(root, height=8)
self.subfolder_text.pack(fill='both', expand=True, padx=10)
# フォルダ名の接頭辞
prefix_frame = tk.Frame(root)
prefix_frame.pack(anchor='w', padx=10, pady=(10, 0))
tk.Label(prefix_frame, text="フォルダ名の接頭辞(任意):").pack(side='left')
self.prefix_var = tk.StringVar()
tk.Entry(prefix_frame, textvariable=self.prefix_var, width=20).pack(side='left')
# 作成フォルダ数
count_frame = tk.Frame(root)
count_frame.pack(anchor='w', padx=10, pady=(10, 0))
self.folder_count_label_var = tk.StringVar()
self.update_folder_count_label()
tk.Label(count_frame, textvariable=self.folder_count_label_var).pack(side='left')
self.folder_count_var = tk.StringVar(value=str(self.default_folder_count))
vcmd = (root.register(self.validate_folder_count), '%P')
tk.Entry(count_frame, textvariable=self.folder_count_var, width=5, validate='key', validatecommand=vcmd).pack(side='left', padx=5)
# ボタン(「上限設定」ボタンは削除済)
button_frame = tk.Frame(root)
button_frame.pack(pady=15)
tk.Button(button_frame, text="実行", command=self.execute_creation).pack(side='left', padx=10)
# バージョン表記
version_label = tk.Label(root, text="version 1.3.0", font=("Arial", 8), fg="gray")
version_label.pack(side='bottom', pady=5)
def update_folder_count_label(self):
self.folder_count_label_var.set(f"作成フォルダ数(1~{self.max_folder_limit}):")
def validate_folder_count(self, value):
if value == "":
return True
try:
val = int(value)
return 1 <= val <= self.max_folder_limit
except ValueError:
return False
def browse_folder(self):
folder_path = filedialog.askdirectory()
if folder_path:
self.path_entry.delete(0, tk.END)
self.path_entry.insert(0, folder_path)
def execute_creation(self):
base_path = self.path_entry.get().strip()
subfolders_raw = self.subfolder_text.get("1.0", tk.END).strip()
prefix = self.prefix_var.get().strip()
try:
count = int(self.folder_count_var.get())
if not (1 <= count <= self.max_folder_limit):
raise ValueError
except ValueError:
messagebox.showerror("入力エラー", f"フォルダ数は1~{self.max_folder_limit}の整数で指定してください。")
return
if not base_path or not os.path.isdir(base_path):
messagebox.showerror("エラー", "有効な対象フォルダを選択してください。")
return
# サブフォルダなしでも許容
subfolder_list = [line.strip() for line in subfolders_raw.splitlines() if line.strip()] if subfolders_raw else []
confirm = messagebox.askokcancel(
"確認",
f"{count}個のフォルダ(接頭辞: '{prefix}')を作成します。\n本当に実行しますか?"
)
if not confirm:
return
try:
for i in range(1, count + 1):
folder_name = f"{prefix}{i:03d}"
target_path = os.path.join(base_path, folder_name)
if subfolder_list:
for sub in subfolder_list:
full_path = os.path.join(target_path, *sub.split("\\"))
os.makedirs(full_path, exist_ok=True)
else:
os.makedirs(target_path, exist_ok=True)
messagebox.showinfo("完了", "フォルダの作成が完了しました。")
except Exception as e:
messagebox.showerror("エラー", f"フォルダ作成中にエラーが発生しました:\n{e}")
# 実行
if __name__ == "__main__":
root = tk.Tk()
##タイトルバーアイコン表示用
data = '''R0lGODlhEAAQAOenAA0IAhEMAQ4NCw8NCw4ODw0OEw8ODA4OEQ8PDg4PEg8PEg4Q
FA8QEw8QFA8RFQ8RFg8RFxARFA8SFg8SGA8SGRASFhISDxESExATGhATHBAUGhAU
GxAUHBEUGRAUHREUGxEUHBQUEhAVHRAVHhEVGxEVHBEVHRIVGxEVHxUVEhUVExEW
HREWHhEWHxEWIBUXExIXIBUYGRMZIRQaIxUdJxYdJRYeJhchLRgiLxgjNRkmOBom
NhknPhgoPhoqQB0tQR8uPxwvUwMxtwAywwAyxQAzxgE0wAI1vwA1yQI1wgE4ywI4
ygA41AI5yhw5ayE5WQY5xCE5YgE6zQI6ywI6zCI6WAk6vCI8ZgE93CI9awA+3x4/
cSI/ZgE/6Ao/yABA4QBB4gBB4xpBkiFCfwxC0SFDeSZDcAVE4iJFeRVFsxBHxw5H
zw1H1R5JnB5JngVK8R9KngVL8xNL0CJLmiBNoyJNnxRP0hJR4hVS2BZT1hdU1hFV
4xZV2RRW4hdW3BxWzhRX5SdXqRRY5SZYqxJa6BZa4hha4Bta3Bpb3hxb2CxbpBlc
3x5c2Rdd5xRe7Rpd5x1f1yBf3Bpg6Rhh7h1g7CFh3R9h6B5i5Blk8iNj3CFl4Sll
0CNm6CNn5SRn6SNo5CBp8S5qyCxr1SRs6iNs8SNt8Cdw7+6tl+6tl+6tl+6tl+6t
l+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6t
l+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6t
l+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6t
l+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6t
l+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6tl+6t
l+6tl+6tl+6tl+6tlyH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAP8ALAAAAAAQ
ABAAAAj8AD9seOBgQouDLARu+KDwQ4kbOGoMMCDggAmGCzdsaKBjESFIZbageXLB
RQmGJD4w4IGJzyFPnB4xCgKAw0mBDHqMsuJnT6M8dwZxsUFhxUIFPj5BmVRIT6VM
iCjNuQBhxYcEPyIVKaVGTh9BeMj8qULDgYkCQCydMeUFkCNDlzppIhVoBgYNMqKY
EaVEUiIhR4wkGbJmx4ISGwi82NQFlB0iS5Q0YZImRgYSJVicyDImFBskVKRMwSLG
AgoSqEFECKDojRYwYb7EcYKgBeoSJWBIuEKnDRw4burkqGACNWbMEVKoWK4iRIeT
xo2bGCGiugcR0KPj3s49JYmAADs=
'''
root.tk.call('wm', 'iconphoto', root._w, tk.PhotoImage(data=data))
####
app = FolderMakerApp(root)
root.mainloop()