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:
parent
3e88e2cd2c
commit
507b09b764
@ -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()
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user