Files
2026-07-17 15:29:53 -04:00

67 lines
2.4 KiB
Python

"""Image picker widget for macro image selection."""
import tkinter as tk
from tkinter import filedialog
from utils.image_converter import copy_image_to_appdata, create_preview
class ImagePicker(tk.Frame):
"""Widget for selecting and previewing a macro image."""
def __init__(self, parent, on_change=None):
super().__init__(parent, bg="#2D2D3D")
self.on_change = on_change
self.image_path = None
self._preview = None
self._build_ui()
def _build_ui(self):
tk.Label(self, text="Routine Image:", bg="#2D2D3D", fg="white",
font=("Segoe UI", 9, "bold")).pack(anchor="w", padx=8, pady=(8, 2))
self.preview_label = tk.Label(self, bg="#1E1E2E", width=128, height=128,
relief="sunken", borderwidth=1)
self.preview_label.pack(padx=8, pady=4)
btn_frame = tk.Frame(self, bg="#2D2D3D")
btn_frame.pack(fill="x", padx=8, pady=4)
tk.Button(btn_frame, text="Choose Image", bg="#3D3D5C", fg="white",
font=("Segoe UI", 8), relief="flat",
command=self._choose_image).pack(side="left", fill="x", expand=True, padx=2)
tk.Button(btn_frame, text="Clear", bg="#7F8C8D", fg="white",
font=("Segoe UI", 8), relief="flat",
command=self._clear_image).pack(side="left", padx=2)
def set_image(self, path):
self.image_path = path
if path:
try:
self._preview = create_preview(path)
self.preview_label.config(image=self._preview, text="")
except Exception:
self.preview_label.config(image="", text="Error loading image",
fg="#FF4444")
else:
self._preview = None
self.preview_label.config(image="", text="No image", fg="#666666")
def _choose_image(self):
path = filedialog.askopenfilename(
title="Select Routine Image",
filetypes=[("Images", "*.png *.jpg *.jpeg *.bmp *.gif"), ("All", "*.*")],
)
if path:
saved = copy_image_to_appdata(path)
self.image_path = saved
self.set_image(saved)
if self.on_change:
self.on_change(saved)
def _clear_image(self):
self.image_path = None
self.set_image(None)
if self.on_change:
self.on_change(None)