From afd038dbdf8251ee099177c86c5f5c244e011160 Mon Sep 17 00:00:00 2001 From: ahdoawhfo Date: Sun, 23 Jun 2024 23:26:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E7=95=8C=E9=9D=A2UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpaceSniffer.py | 92 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 26 deletions(-) diff --git a/SpaceSniffer.py b/SpaceSniffer.py index 1793c5a..9941218 100644 --- a/SpaceSniffer.py +++ b/SpaceSniffer.py @@ -58,7 +58,7 @@ class App(tk.Tk): def __init__(self, start_path): # 初始化 super().__init__() self.withdraw() - self.title("目录扫描器 V1.0") + self.title("目录扫描器 V1.3") self.start_path = start_path self.queue = Queue() self.progress_queue = Queue() @@ -84,27 +84,6 @@ class App(tk.Tk): variable=self.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("", self.on_double_click) self.tree.bind("", self.on_enter_press) @@ -120,6 +99,68 @@ class App(tk.Tk): self.protocol("WM_DELETE_WINDOW", self.on_close) 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:当双击的是文件时,打开文件 item = self.tree.identify_row(event.y) @@ -137,9 +178,6 @@ class App(tk.Tk): if new_path: self.start_path = new_path self.refresh_tree() - else: - messagebox.showinfo("提示", "没有选中任何目录,程序即将退出") - self.on_close() def format_size(self, size): # 格式化文件/目录大小 units = ["B", "KB", "MB", "GB", "TB"] @@ -345,12 +383,14 @@ class App(tk.Tk): self.refresh_tree() def refresh_tree(self): # 刷新树状图 - self.is_sorting = False # Reset sorting flag + self.is_sorting = False self.queue.queue.clear() self.progress_queue.queue.clear() self.tree.delete(*self.tree.get_children()) self.populate_root() self.scanner = FolderScanner(self.start_path, self.queue, self.progress_queue) + self.progress_window = ProgressWindow(self) + self.withdraw() self.scanner.start() self.update_tree() self.update_progress()