Display initial swatch using default colour centre
This commit is contained in:
parent
382bccaedd
commit
666ce85470
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue