diff --git a/README.md b/README.md index a35f5ba..60dc24d 100644 --- a/README.md +++ b/README.md @@ -15,3 +15,10 @@ ```bash python lumen_profiler.py ``` + +### ToDo + +- [ ] ウインドウサイズ変更時の再描画 +- [x] ステータスバー +- [ ] GUI 改善 +- [ ] メッセージ表示 diff --git a/__pycache__/lumen_profiler.cpython-313.pyc b/__pycache__/lumen_profiler.cpython-313.pyc new file mode 100644 index 0000000..9259165 --- /dev/null +++ b/__pycache__/lumen_profiler.cpython-313.pyc Binary files differ diff --git a/gui_app.py b/gui_app.py index ba496e8..f48d3f5 100644 --- a/gui_app.py +++ b/gui_app.py @@ -1,9 +1,9 @@ -import tkinter as tk -from tkinter import ttk -import tkinter.filedialog +import os import threading import time -import os +import tkinter as tk +import tkinter.filedialog +from tkinter import ttk from PIL import Image, ImageOps, ImageTk @@ -27,11 +27,9 @@ self.file_button = tk.Button( self.top_frame, text="映像ファイルを開く", command=self.open_movie ) - self.file_button.pack(side=tk.LEFT) + self.file_button.pack(side=tk.LEFT, padx=(10, 0)) self.file_text = tk.Label(self.top_frame, text="no movie") self.file_text.pack(side=tk.LEFT, fill=tk.X, padx=(20, 0)) - self.progressbar = ttk.Progressbar(self.top_frame, orient="horizontal", length=200, mode="determinate", maximum=99) - self.progressbar.pack(side=tk.LEFT, padx=(20, 0)) # 分析フレーム self.analize_frame = tk.Frame(self.tkroot) @@ -39,17 +37,17 @@ self.analyze_button = tk.Button( self.analize_frame, text="分析を実行", command=self.analyze ) - self.analyze_button.pack(side=tk.LEFT) - self.area_ratio_label = tk.Label(self.analize_frame, text="暗部の面積比率(%)") - self.area_ratio_label.pack(side=tk.LEFT, padx=(20, 0)) - self.area_ratio_text = tk.Entry(self.analize_frame, width=5, justify=tk.RIGHT) - self.area_ratio_text.insert(tk.END, "8.0") - self.area_ratio_text.pack(side=tk.LEFT) + self.analyze_button.pack(side=tk.LEFT, padx=(10, 0)) self.interval_label = tk.Label(self.analize_frame, text="分析フレーム間隔") self.interval_label.pack(side=tk.LEFT, padx=(20, 0)) self.interval_text = tk.Entry(self.analize_frame, width=5, justify=tk.RIGHT) self.interval_text.insert(tk.END, "2") self.interval_text.pack(side=tk.LEFT) + self.area_ratio_label = tk.Label(self.analize_frame, text="暗部の面積比率(%)") + self.area_ratio_label.pack(side=tk.LEFT, padx=(20, 0)) + self.area_ratio_text = tk.Entry(self.analize_frame, width=5, justify=tk.RIGHT) + self.area_ratio_text.insert(tk.END, "8.0") + self.area_ratio_text.pack(side=tk.LEFT) self.sigma_label = tk.Label(self.analize_frame, text="シグマ(輪郭の円滑性)") self.sigma_label.pack(side=tk.LEFT, padx=(20, 0)) self.sigma_text = tk.Entry(self.analize_frame, width=5, justify=tk.RIGHT) @@ -58,7 +56,7 @@ self.save_button = tk.Button( self.analize_frame, text="分析結果を保存", command=self.on_save ) - self.save_button.pack(side=tk.LEFT) + self.save_button.pack(side=tk.LEFT, padx=(20, 0)) # 画像表示 self.canvas = tk.Canvas(self.tkroot, bg="black") @@ -70,7 +68,21 @@ orient=tk.HORIZONTAL, command=self.on_time_slider_change, ) - self.time_slider.pack(fill=tk.X) + self.time_slider.pack(fill=tk.X, padx=(10, 10)) + + # ステータスバー表示 + self.status_frame = tk.Frame(self.tkroot) + self.status_frame.pack(fill=tk.X) + self.status_text = tk.Text(self.status_frame, state="disable", height=1) + self.status_text.pack(side=tk.LEFT, expand=True, padx=(10, 0)) + self.progressbar = ttk.Progressbar( + self.status_frame, + orient="horizontal", + length=200, + mode="determinate", + maximum=99, + ) + self.progressbar.pack(side=tk.LEFT, padx=(20, 10)) self.tkroot.mainloop() @@ -81,7 +93,9 @@ sigma = float(self.sigma_text.get()) # 分析(ワーカースレッド) - thread = threading.Thread(target=self.lp.profiling, args=(ratio, sigma, interval)) + thread = threading.Thread( + target=self.lp.profiling, args=(ratio, sigma, interval) + ) thread.start() while thread.is_alive(): self.progressbar.configure(value=self.lp.progress_count % 100) @@ -89,7 +103,7 @@ time.sleep(0.01) thread.join() self.progressbar.configure(value=0) - #self.lp.profiling(ratio, sigma, interval) + # self.lp.profiling(ratio, sigma, interval) self.time_slider.config(to=len(self.lp.results) - 1) self.time_slider.set(0) @@ -126,7 +140,9 @@ # 分析結果を保存 def on_save(self): fn = os.path.splitext(os.path.basename(self.moviefilename))[0] - filename = tk.filedialog.asksaveasfilename(initialfile=fn + "_分析結果.csv", filetypes=[("csv", "*.csv")]) + filename = tk.filedialog.asksaveasfilename( + initialfile=fn + "_分析結果.csv", filetypes=[("csv", "*.csv")] + ) if filename == "": # cancel return self.lp.csv_output(filename) @@ -149,6 +165,7 @@ self.canvas.create_image(0, 0, image=self.disp, anchor=tk.NW) self.save_button.config(state=tk.NORMAL if self.is_analyzed else tk.DISABLED) + # main if __name__ == "__main__": app = GuiApp()