From e9db16be465084c3b4a1020574825e5232b85228 Mon Sep 17 00:00:00 2001 From: lm Date: Fri, 17 Oct 2025 15:57:15 +0200 Subject: [PATCH] Show current colour swatch in palette header --- app/gui/color_picker.py | 13 +++++++++++++ app/gui/ui.py | 15 ++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/app/gui/color_picker.py b/app/gui/color_picker.py index 0959ea1..32b4479 100644 --- a/app/gui/color_picker.py +++ b/app/gui/color_picker.py @@ -12,6 +12,7 @@ class ColorPickerMixin: ref_hue: float | None hue_span: float = 45.0 # degrees around the picked hue + selected_colour: tuple[int, int, int] | None = None def choose_color(self): rgb, hex_colour = colorchooser.askcolor(title="Farbe wählen") @@ -23,6 +24,7 @@ class ColorPickerMixin: self.status.config( text=f"Farbe gewählt: {label} — Hue {hue_deg:.1f}°, S {sat_pct:.0f}%, V {val_pct:.0f}%" ) + self._update_selected_colour(r, g, b) def apply_sample_colour(self, hex_colour: str, name: str | None = None) -> None: """Apply a predefined colour preset.""" @@ -39,6 +41,7 @@ class ColorPickerMixin: f"Hue {hue_deg:.1f}°, S {sat_pct:.0f}%, V {val_pct:.0f}%" ) ) + self._update_selected_colour(*rgb) def enable_pick_mode(self): if self.preview_img is None: @@ -67,6 +70,7 @@ class ColorPickerMixin: self.status.config( text=f"Farbe vom Bild gewählt: Hue {hue_deg:.1f}°, S {sat_pct:.0f}%, V {val_pct:.0f}%" ) + self._update_selected_colour(r, g, b) def _apply_rgb_selection(self, r: int, g: int, b: int) -> tuple[float, float, float]: """Update slider ranges based on an RGB colour and return HSV summary.""" @@ -77,6 +81,15 @@ class ColorPickerMixin: self.update_preview() return hue_deg, s * 100.0, v * 100.0 + def _update_selected_colour(self, r: int, g: int, b: int) -> None: + self.selected_colour = (r, g, b) + if hasattr(self, "current_colour_sw"): + hex_colour = f"#{r:02x}{g:02x}{b:02x}" + try: + self.current_colour_sw.configure(background=hex_colour) + except Exception: + pass + def _set_slider_targets(self, hue_deg: float, saturation: float, value: float) -> None: span = getattr(self, "hue_span", 45.0) self.hue_min.set((hue_deg - span) % 360) diff --git a/app/gui/ui.py b/app/gui/ui.py index 1bbed96..44803b9 100644 --- a/app/gui/ui.py +++ b/app/gui/ui.py @@ -47,9 +47,18 @@ class UIBuilderMixin: self.status_default_text = self.status.cget("text") self._status_palette = {"fg": self.status.cget("foreground")} - palette_frame = ttk.Frame(self.root) - palette_frame.pack(fill=tk.X, padx=12, pady=(6, 8)) - ttk.Label(palette_frame, text="Beispielfarben:").pack(side=tk.LEFT, padx=(0, 8)) + palette_frame = ttk.Frame(self.root) + palette_frame.pack(fill=tk.X, padx=12, pady=(6, 8)) + self.current_colour_sw = tk.Canvas( + palette_frame, + width=24, + height=24, + highlightthickness=0, + background="#f2c744", + bd=0, + ) + self.current_colour_sw.pack(side=tk.LEFT, padx=(0, 8), pady=2) + ttk.Label(palette_frame, text="Aktuelle Farbe | Beispielfarben:").pack(side=tk.LEFT, padx=(0, 8)) swatch_container = ttk.Frame(palette_frame) swatch_container.pack(side=tk.LEFT) for name, hex_code in self._preset_colours():