Initial public release
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user