优化了界面UI

This commit is contained in:
ahdoawhfo 2024-06-23 23:26:01 +08:00
parent e7f68cb442
commit afd038dbdf
Signed by: ahdoawhfo
GPG Key ID: 5B4A734D16322C1D
1 changed files with 66 additions and 26 deletions

View File

@ -58,7 +58,7 @@ class App(tk.Tk):
def __init__(self, start_path): # 初始化 def __init__(self, start_path): # 初始化
super().__init__() super().__init__()
self.withdraw() self.withdraw()
self.title("目录扫描器 V1.0") self.title("目录扫描器 V1.3")
self.start_path = start_path self.start_path = start_path
self.queue = Queue() self.queue = Queue()
self.progress_queue = Queue() self.progress_queue = Queue()
@ -84,27 +84,6 @@ class App(tk.Tk):
variable=self.folder_first_var, variable=self.folder_first_var,
command=self.update_folder_first_var, command=self.update_folder_first_var,
) )
self.folder_first_checkbutton.pack(side=tk.LEFT, fill=tk.X)
self.sort_by_size_button = tk.Button(
self, text="根据目录/文件大小排序", command=self.sort_by_size
)
self.sort_by_size_button.pack(side=tk.LEFT, fill=tk.X)
self.sort_by_name_button = tk.Button(
self, text="根据目录/文件名排序", command=self.sort_by_name
)
self.sort_by_name_button.pack(side=tk.LEFT, fill=tk.X)
self.refresh_button = tk.Button(
self, text="刷新列表", command=self.refresh_tree
)
self.refresh_button.pack(side=tk.LEFT, fill=tk.X)
self.reselect_button = tk.Button(
self, text="重新选择目录", command=self.reselect_directory
)
self.reselect_button.pack(side=tk.LEFT, fill=tk.X)
self.tree.bind("<Double-1>", self.on_double_click) self.tree.bind("<Double-1>", self.on_double_click)
self.tree.bind("<Return>", self.on_enter_press) self.tree.bind("<Return>", self.on_enter_press)
@ -120,6 +99,68 @@ class App(tk.Tk):
self.protocol("WM_DELETE_WINDOW", self.on_close) self.protocol("WM_DELETE_WINDOW", self.on_close)
self.set_window_size() self.set_window_size()
self.create_menu()
def create_menu(self):
menu_bar = tk.Menu(self)
self.config(menu=menu_bar)
file_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="文件", menu=file_menu)
file_menu.add_command(label="选择目录", command=self.reselect_directory)
file_menu.add_separator()
file_menu.add_command(label="退出", command=self.on_close)
view_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="视图", menu=view_menu)
view_menu.add_checkbutton(
label="目录优先显示",
variable=self.folder_first_var,
command=self.update_folder_first_var,
)
view_menu.add_command(
label="根据目录/文件大小排序",
command=self.sort_by_size,
)
view_menu.add_command(
label="根据目录/文件名排序",
command=self.sort_by_size,
)
view_menu.add_command(
label="刷新列表",
command=self.refresh_tree,
)
help_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="帮助", menu=help_menu)
help_menu.add_command(label="帮助", command=self.show_help)
help_menu.add_command(label="更新日志", command=self.show_update_log)
help_menu.add_command(label="关于", command=self.show_about)
def show_help(self):
messagebox.showinfo(
"帮助",
"1. 双击文件夹可以展开/折叠\n",
"2. 双击文件可以直接打开\n",
"3. 右键单击文件/文件夹可以打开、删除文件/文件夹、进入所在目录\n",
"4. 点击左上角文件菜单可以重新选择目录进行扫描\n",
"5. 点击左上角视图菜单可以根据目录/文件大小、目录/文件名排序、刷新列表\n",
)
def show_update_log(self):
messagebox.showinfo(
"更新日志",
"V1.0 实现了目录扫描功能,文件/目录大小统计功能\n",
"\n",
"V1.1 实现了重新选择目录扫描功能,新增了进度条显示\n",
"\n",
"V1.2 实现了双击打开目录、文件的功能,实现了右键菜单\n",
"\n",
"V1.3 优化了界面UI\n",
)
def show_about(self):
messagebox.showinfo("关于", "目录扫描器 V1.3\n作者: ahdoawhfo")
def on_double_click(self, event): # V1.2 Update当双击的是文件时打开文件 def on_double_click(self, event): # V1.2 Update当双击的是文件时打开文件
item = self.tree.identify_row(event.y) item = self.tree.identify_row(event.y)
@ -137,9 +178,6 @@ class App(tk.Tk):
if new_path: if new_path:
self.start_path = new_path self.start_path = new_path
self.refresh_tree() self.refresh_tree()
else:
messagebox.showinfo("提示", "没有选中任何目录,程序即将退出")
self.on_close()
def format_size(self, size): # 格式化文件/目录大小 def format_size(self, size): # 格式化文件/目录大小
units = ["B", "KB", "MB", "GB", "TB"] units = ["B", "KB", "MB", "GB", "TB"]
@ -345,12 +383,14 @@ class App(tk.Tk):
self.refresh_tree() self.refresh_tree()
def refresh_tree(self): # 刷新树状图 def refresh_tree(self): # 刷新树状图
self.is_sorting = False # Reset sorting flag self.is_sorting = False
self.queue.queue.clear() self.queue.queue.clear()
self.progress_queue.queue.clear() self.progress_queue.queue.clear()
self.tree.delete(*self.tree.get_children()) self.tree.delete(*self.tree.get_children())
self.populate_root() self.populate_root()
self.scanner = FolderScanner(self.start_path, self.queue, self.progress_queue) self.scanner = FolderScanner(self.start_path, self.queue, self.progress_queue)
self.progress_window = ProgressWindow(self)
self.withdraw()
self.scanner.start() self.scanner.start()
self.update_tree() self.update_tree()
self.update_progress() self.update_progress()