Display initial swatch using default colour centre

This commit is contained in:
lm 2025-10-17 16:06:07 +02:00
parent 382bccaedd
commit 666ce85470
2 changed files with 37 additions and 10 deletions

View File

@ -83,12 +83,17 @@ class ColorPickerMixin:
def _update_selected_colour(self, r: int, g: int, b: int) -> None: def _update_selected_colour(self, r: int, g: int, b: int) -> None:
self.selected_colour = (r, g, b) self.selected_colour = (r, g, b)
hex_colour = f"#{r:02x}{g:02x}{b:02x}"
if hasattr(self, "current_colour_sw"): if hasattr(self, "current_colour_sw"):
hex_colour = f"#{r:02x}{g:02x}{b:02x}"
try: try:
self.current_colour_sw.configure(background=hex_colour) self.current_colour_sw.configure(background=hex_colour)
except Exception: except Exception:
pass 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: def _set_slider_targets(self, hue_deg: float, saturation: float, value: float) -> None:
span = getattr(self, "hue_span", 45.0) span = getattr(self, "hue_span", 45.0)

View File

@ -1,10 +1,11 @@
"""UI helpers and reusable Tk callbacks.""" """UI helpers and reusable Tk callbacks."""
from __future__ import annotations from __future__ import annotations
import tkinter as tk import colorsys
import tkinter.font as tkfont import tkinter as tk
from tkinter import ttk import tkinter.font as tkfont
from tkinter import ttk
class UIBuilderMixin: class UIBuilderMixin:
@ -49,16 +50,17 @@ class UIBuilderMixin:
palette_frame = ttk.Frame(self.root) palette_frame = ttk.Frame(self.root)
palette_frame.pack(fill=tk.X, padx=12, pady=(6, 8)) palette_frame.pack(fill=tk.X, padx=12, pady=(6, 8))
default_colour = self._default_colour_hex()
self.current_colour_sw = tk.Canvas( self.current_colour_sw = tk.Canvas(
palette_frame, palette_frame,
width=24, width=24,
height=24, height=24,
highlightthickness=0, highlightthickness=0,
background="#f2c744", background=default_colour,
bd=0, bd=0,
) )
self.current_colour_sw.pack(side=tk.LEFT, padx=(0, 8), pady=2) 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)) self.current_colour_label.pack(side=tk.LEFT, padx=(0, 8))
ttk.Label(palette_frame, text="Beispielfarben:").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) swatch_container = ttk.Frame(palette_frame)
@ -514,6 +516,26 @@ class UIBuilderMixin:
self.ratio_label.configure(foreground=colour) self.ratio_label.configure(foreground=colour)
except Exception: except Exception:
pass 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): def _init_copy_menu(self):
self._copy_target = None self._copy_target = None