-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGSfolders.pyw
179 lines (147 loc) · 6.26 KB
/
GSfolders.pyw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
import os
import tkinter as tk
import tkinter.font as tkFont
from tkinter import filedialog
from tkinter import messagebox
def create_folders(folder_path):
folder_name = folder_name_entry.get()
num_folders = num_folders_entry.get()
if folder_name_entry.get() == '加“/”可创建子文件夹':
messagebox.showerror("出错了", "请输入文件夹名称")
return
if not folder_name_entry.get().strip():
messagebox.showerror("出错了", "请输入文件夹名称")
return
try:
num_folders = int(num_folders)
if num_folders <= 0:
raise ValueError
except ValueError:
messagebox.showerror("出错了", "请输入正整数的文件夹数量")
return
success_count = 0
fail_count = 0
if '/' in folder_name:
folder_names = folder_name.split('/')
num_levels = len(folder_names)
parent_folder_name = folder_names[0]
sub_folder_name = folder_names[-1]
for i in range(1, num_folders+1):
if num_folders == 1:
folder_path_i = os.path.join(folder_path, folder_name)
else:
parent_folder_path = os.path.join(folder_path, f"{parent_folder_name}_{i}")
os.makedirs(parent_folder_path, exist_ok=True)
current_path = parent_folder_path
for j in range(num_levels-2):
current_folder_name = folder_names[j+1]
current_path = os.path.join(current_path, current_folder_name)
os.makedirs(current_path, exist_ok=True)
folder_path_i = os.path.join(current_path, sub_folder_name)
try:
os.makedirs(folder_path_i)
success_count += 1
except:
fail_count += 1
elif '&' in folder_name:
folder_names = folder_name.replace('&', ' ').strip().split()
for i in range(1, num_folders+1):
if num_folders == 1:
for name in folder_names:
folder_path_i = os.path.join(folder_path, name.strip())
try:
os.makedirs(folder_path_i)
success_count += 1
except:
fail_count += 1
else:
dir_name = f"{folder_name}_{i}"
folder_path_i = os.path.join(folder_path, dir_name)
os.makedirs(folder_path_i, exist_ok=True)
for name in folder_names:
sub_folder_path = os.path.join(folder_path_i, name.strip())
try:
os.makedirs(sub_folder_path)
success_count += 1
except:
fail_count += 1
else:
for i in range(1, num_folders+1):
if num_folders == 1:
folder_path_i = os.path.join(folder_path, folder_name)
else:
folder_path_i = os.path.join(folder_path, f"{folder_name}_{i}")
try:
os.makedirs(folder_path_i)
success_count += 1
except:
fail_count += 1
if success_count > 0:
messagebox.showinfo("提示", f"成功创建 {success_count} 个文件夹。")
else:
messagebox.showerror("出错了", f"创建文件夹失败,共有 {fail_count} 个文件夹创建失败。")
def select_path():
folder_path = filedialog.askdirectory()
if folder_path:
create_folders(folder_path)
import tkinter as tk
from tkinter import ttk
import tkinter.font as tkFont
root = tk.Tk()
root.title("GSfolders")
icon = tk.PhotoImage(file='./icon.png')
root.iconphoto(True, icon)
# 让窗口居中
root.geometry("350x230+{}+{}".format(int(root.winfo_screenwidth()/2 - 150), int(root.winfo_screenheight()/2 - 100)))
font = ("黑体", 12)
default_font = tkFont.Font(family='黑体', size=12, slant='italic')
# 使用 ttk.Style 创建样式对象
style = ttk.Style()
# 设置应用程序样式主题
# theme_name = style.theme_names()[0]
style.theme_use("vista")
# 配置 TButton 样式
style.configure("TButton",
padding=5,
relief="flat",
font=font,
foreground="#3B3E41", ## 注意这里
background="#F0F0F0",
bordercolor="#A5A5A5",
darkcolor="#A5A5A5",
lightcolor="#A5A5A5")
# 配置 TEntry 样式
style.configure("TEntry",
padding=5,
relief="flat",
font=default_font,
foreground="#3B3E41", ## 注意这里
background="#FFFFFF",
bordercolor="#A5A5A5",
darkcolor="#A5A5A5",
lightcolor="#A5A5A5")
folder_name_label = tk.Label(root, text="文件夹名称", font=font, fg="#3B3E41")
folder_name_label.pack(pady=(10,1))
folder_name_entry = ttk.Entry(root, width=22, justify='center', font=default_font, style="TEntry", foreground='#808080')
folder_name_entry.pack(pady=(5,10))
folder_name_entry.insert(0, '加“/”可创建子文件夹')
def on_entry_click(event):
if folder_name_entry.get() == '加“/”可创建子文件夹':
folder_name_entry.delete(0, tk.END) # 删除当前的文字
folder_name_entry.config(foreground='#333333', font=('黑体', 12))
def on_entry_leave(event):
if not folder_name_entry.get():
folder_name_entry.insert(0, '加“/”可创建子文件夹')
folder_name_entry.config(foreground='#808080', font=default_font)
# 绑定单击和离开事件
folder_name_entry.bind("<Button-1>", on_entry_click)
folder_name_entry.bind("<FocusOut>", on_entry_leave)
num_folders_label = tk.Label(root, text="文件夹数量:", font=font, fg="#3B3E41" )
num_folders_label.pack(pady=(3,1))
num_folders_entry = ttk.Entry(root, justify='center', font=font, width=22, style="TEntry")
num_folders_entry.pack(pady=(5,10))
def create_folders_callback():
select_path()
create_button = ttk.Button(root, text="创建文件夹", command=create_folders_callback, style="TButton")
create_button.pack(pady=20)
root.mainloop()