Refactor PhotoTagger GUI to improve search functionality. Update search controls for last name filtering by introducing a helper label and reorganizing layout for better usability. Adjust grid placements for matched person info and image to enhance visual clarity and consistency across the interface.

This commit is contained in:
tanyar09 2025-09-30 13:24:58 -04:00
parent da6f810b5b
commit 0fb6a19624

View File

@ -3323,8 +3323,8 @@ class PhotoTagger:
main_frame.columnconfigure(0, weight=1)
main_frame.columnconfigure(1, weight=1)
# Left side - matched face (person)
left_frame = ttk.LabelFrame(main_frame, text="Matched Person", padding="10")
# Left side - identified person
left_frame = ttk.LabelFrame(main_frame, text="Identified person", padding="10")
left_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S), padx=(0, 5))
# Right side - unidentified faces that match this person
@ -3336,22 +3336,34 @@ class PhotoTagger:
# Search controls for filtering people by last name
last_name_search_var = tk.StringVar()
search_row = ttk.Frame(left_frame)
search_row.grid(row=0, column=0, sticky=(tk.W, tk.E), pady=(0, 10))
search_entry = ttk.Entry(search_row, textvariable=last_name_search_var, width=20)
search_entry.pack(side=tk.LEFT)
search_btn = ttk.Button(search_row, text="Search", width=8)
search_btn.pack(side=tk.LEFT, padx=(6, 0))
clear_btn = ttk.Button(search_row, text="Clear", width=6)
clear_btn.pack(side=tk.LEFT, padx=(6, 0))
# Search field with label underneath (like modifyidentified edit section)
search_frame = ttk.Frame(left_frame)
search_frame.grid(row=0, column=0, sticky=(tk.W, tk.E), pady=(0, 10))
# Search input on the left
search_entry = ttk.Entry(search_frame, textvariable=last_name_search_var, width=20)
search_entry.grid(row=0, column=0, sticky=tk.W)
# Buttons on the right of the search input
buttons_row = ttk.Frame(search_frame)
buttons_row.grid(row=0, column=1, sticky=tk.W, padx=(6, 0))
search_btn = ttk.Button(buttons_row, text="Search", width=8)
search_btn.pack(side=tk.LEFT, padx=(0, 5))
clear_btn = ttk.Button(buttons_row, text="Clear", width=6)
clear_btn.pack(side=tk.LEFT)
# Helper label directly under the search input
last_name_label = ttk.Label(search_frame, text="Type Last Name", font=("Arial", 8), foreground="gray")
last_name_label.grid(row=1, column=0, sticky=tk.W, pady=(2, 0))
# Matched person info
matched_info_label = ttk.Label(left_frame, text="", font=("Arial", 10, "bold"))
matched_info_label.grid(row=1, column=0, pady=(0, 10), sticky=tk.W)
matched_info_label.grid(row=2, column=0, pady=(0, 10), sticky=tk.W)
# Matched person image
matched_canvas = tk.Canvas(left_frame, width=300, height=300, bg='white')
matched_canvas.grid(row=2, column=0, pady=(0, 10))
matched_canvas.grid(row=3, column=0, pady=(0, 10))
# Save button for this person (will be created after function definitions)
save_btn = None
@ -3664,7 +3676,7 @@ class PhotoTagger:
# Create save button now that functions are defined
save_btn = ttk.Button(left_frame, text="💾 Save Changes", command=on_confirm_matches)
save_btn.grid(row=3, column=0, pady=(0, 10), sticky=(tk.W, tk.E))
save_btn.grid(row=4, column=0, pady=(0, 10), sticky=(tk.W, tk.E))
def update_button_states():
"""Update button states based on current position"""
@ -4030,16 +4042,26 @@ class PhotoTagger:
people_frame.grid(row=1, column=0, sticky=(tk.W, tk.E, tk.N, tk.S), padx=(0, 8))
people_frame.columnconfigure(0, weight=1)
# Search controls (Last Name)
# Search controls (Last Name) with label under the input (match auto-match style)
last_name_search_var = tk.StringVar()
search_row = ttk.Frame(people_frame)
search_row.grid(row=0, column=0, columnspan=2, sticky=(tk.W, tk.E), pady=(0, 6))
search_entry = ttk.Entry(search_row, textvariable=last_name_search_var, width=20)
search_entry.pack(side=tk.LEFT)
search_btn = ttk.Button(search_row, text="Search", width=8)
search_btn.pack(side=tk.LEFT, padx=(6, 0))
clear_btn = ttk.Button(search_row, text="Clear", width=6)
clear_btn.pack(side=tk.LEFT, padx=(6, 0))
search_frame = ttk.Frame(people_frame)
search_frame.grid(row=0, column=0, columnspan=2, sticky=(tk.W, tk.E), pady=(0, 6))
# Entry on the left
search_entry = ttk.Entry(search_frame, textvariable=last_name_search_var, width=20)
search_entry.grid(row=0, column=0, sticky=tk.W)
# Buttons to the right of the entry
buttons_row = ttk.Frame(search_frame)
buttons_row.grid(row=0, column=1, sticky=tk.W, padx=(6, 0))
search_btn = ttk.Button(buttons_row, text="Search", width=8)
search_btn.pack(side=tk.LEFT, padx=(0, 5))
clear_btn = ttk.Button(buttons_row, text="Clear", width=6)
clear_btn.pack(side=tk.LEFT)
# Helper label directly under the entry
last_name_label = ttk.Label(search_frame, text="Type Last Name", font=("Arial", 8), foreground="gray")
last_name_label.grid(row=1, column=0, sticky=tk.W, pady=(2, 0))
people_canvas = tk.Canvas(people_frame, bg='white')
people_scrollbar = ttk.Scrollbar(people_frame, orient="vertical", command=people_canvas.yview)