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:
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)

View File

@ -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