Implement progress tracking and status updates in Dashboard GUI processing

This commit enhances the Dashboard GUI by adding a progress bar and status label to provide real-time feedback during photo processing. The processing button is now disabled during the operation, and the progress updates are simulated to reflect various stages of the process. Additionally, error handling has been improved to reset the progress state in case of failures, ensuring a smoother user experience. The README has been updated to include these new features, emphasizing the improved interactivity and user feedback during processing tasks.
This commit is contained in:
tanyar09 2025-10-14 14:53:22 -04:00
parent 3e88e2cd2c
commit 507b09b764

View File

@ -6,6 +6,7 @@ Designed with web migration in mind - single window with menu bar and content ar
import os
import threading
import time
import tkinter as tk
from tkinter import ttk, messagebox
from typing import Dict, Optional, Callable
@ -1707,8 +1708,20 @@ class DashboardGUI:
tk.Label(limit_frame, text="photos", font=("Arial", 11)).grid(row=0, column=2, sticky=tk.W)
# Action button
process_btn = ttk.Button(form_frame, text="🚀 Start Processing", command=self._run_process)
process_btn.grid(row=1, column=0, sticky=tk.W, pady=(20, 0))
self.process_btn = ttk.Button(form_frame, text="🚀 Start Processing", command=self._run_process)
self.process_btn.grid(row=1, column=0, sticky=tk.W, pady=(20, 0))
# Progress bar
self.progress_var = tk.DoubleVar()
self.progress_bar = ttk.Progressbar(form_frame, variable=self.progress_var,
maximum=100, length=400, mode='determinate')
self.progress_bar.grid(row=2, column=0, sticky=(tk.W, tk.E), pady=(15, 0))
# Progress status label
self.progress_status_var = tk.StringVar(value="Ready to process")
progress_status_label = tk.Label(form_frame, textvariable=self.progress_status_var,
font=("Arial", 11), fg="gray")
progress_status_label.grid(row=3, column=0, sticky=tk.W, pady=(5, 0))
return panel
@ -1982,13 +1995,54 @@ class DashboardGUI:
def worker():
try:
# Disable the button and initialize progress
self.process_btn.config(state="disabled", text="⏳ Processing...")
self.progress_var.set(0)
self.progress_status_var.set("Starting processing...")
self.status_label.config(text="Processing...")
# Simulate progress updates (since we don't have real progress from on_process)
def update_progress():
for i in range(101):
if i <= 20:
self.progress_status_var.set("Initializing face detection...")
elif i <= 40:
self.progress_status_var.set("Loading photos...")
elif i <= 60:
self.progress_status_var.set("Detecting faces...")
elif i <= 80:
self.progress_status_var.set("Processing face encodings...")
elif i <= 95:
self.progress_status_var.set("Saving results...")
else:
self.progress_status_var.set("Finalizing...")
self.progress_var.set(i)
self.root.update_idletasks()
time.sleep(0.05) # Small delay to show progress
# Start progress updates in a separate thread
progress_thread = threading.Thread(target=update_progress, daemon=True)
progress_thread.start()
# Run the actual processing
result = self.on_process(limit_value)
# Ensure progress reaches 100%
self.progress_var.set(100)
self.progress_status_var.set("Processing completed successfully!")
messagebox.showinfo("Process", f"Processing completed. Result: {result}", parent=self.root)
self.status_label.config(text="Ready")
except Exception as e:
self.progress_var.set(0)
self.progress_status_var.set("Processing failed")
messagebox.showerror("Process", f"Error during processing: {e}", parent=self.root)
self.status_label.config(text="Ready")
finally:
# Re-enable the button regardless of success or failure
self.process_btn.config(state="normal", text="🚀 Start Processing")
threading.Thread(target=worker, daemon=True).start()