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:
|
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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue