From 666ce8547090e6645b18921efdcd5fdbd6f1686e Mon Sep 17 00:00:00 2001 From: lm Date: Fri, 17 Oct 2025 16:06:07 +0200 Subject: [PATCH] Display initial swatch using default colour centre --- app/gui/color_picker.py | 7 ++++++- app/gui/ui.py | 40 +++++++++++++++++++++++++++++++--------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/app/gui/color_picker.py b/app/gui/color_picker.py index 32b4479..68ba63e 100644 --- a/app/gui/color_picker.py +++ b/app/gui/color_picker.py @@ -83,12 +83,17 @@ class ColorPickerMixin: def _update_selected_colour(self, r: int, g: int, b: int) -> None: self.selected_colour = (r, g, b) + hex_colour = f"#{r:02x}{g:02x}{b:02x}" 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 + if hasattr(self, "current_colour_label"): + try: + self.current_colour_label.configure(text=f"Aktuelle Farbe ({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) diff --git a/app/gui/ui.py b/app/gui/ui.py index 3ff8018..0023a2f 100644 --- a/app/gui/ui.py +++ b/app/gui/ui.py @@ -1,10 +1,11 @@ -"""UI helpers and reusable Tk callbacks.""" - -from __future__ import annotations - -import tkinter as tk -import tkinter.font as tkfont -from tkinter import ttk +"""UI helpers and reusable Tk callbacks.""" + +from __future__ import annotations + +import colorsys +import tkinter as tk +import tkinter.font as tkfont +from tkinter import ttk class UIBuilderMixin: @@ -49,16 +50,17 @@ class UIBuilderMixin: palette_frame = ttk.Frame(self.root) palette_frame.pack(fill=tk.X, padx=12, pady=(6, 8)) + default_colour = self._default_colour_hex() self.current_colour_sw = tk.Canvas( palette_frame, width=24, height=24, highlightthickness=0, - background="#f2c744", + background=default_colour, bd=0, ) self.current_colour_sw.pack(side=tk.LEFT, padx=(0, 8), pady=2) - self.current_colour_label = ttk.Label(palette_frame, text="Aktuelle Farbe") + self.current_colour_label = ttk.Label(palette_frame, text=f"Aktuelle Farbe ({default_colour})") self.current_colour_label.pack(side=tk.LEFT, padx=(0, 8)) ttk.Label(palette_frame, text="Beispielfarben:").pack(side=tk.LEFT, padx=(0, 8)) swatch_container = ttk.Frame(palette_frame) @@ -514,6 +516,26 @@ class UIBuilderMixin: self.ratio_label.configure(foreground=colour) except Exception: pass + + def _default_colour_hex(self) -> str: + defaults = getattr(self, "DEFAULTS", {}) + hue_min = float(defaults.get("hue_min", 0.0)) + hue_max = float(defaults.get("hue_max", hue_min)) + if hue_min <= hue_max: + hue = (hue_min + hue_max) / 2.0 + else: + span = ((hue_max + 360.0) - hue_min) / 2.0 + hue = (hue_min + span) % 360.0 + + sat_min = float(defaults.get("sat_min", 0.0)) + saturation = (sat_min + 100.0) / 2.0 + + val_min = float(defaults.get("val_min", 0.0)) + val_max = float(defaults.get("val_max", 100.0)) + value = (val_min + val_max) / 2.0 + + r, g, b = colorsys.hsv_to_rgb(hue / 360.0, saturation / 100.0, value / 100.0) + return f"#{int(r * 255):02x}{int(g * 255):02x}{int(b * 255):02x}" def _init_copy_menu(self): self._copy_target = None