Compare commits

..

3 Commits

3 changed files with 49 additions and 17 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

@ -38,7 +38,7 @@ class ThemeMixin:
status_fg = "#f5f5f5" status_fg = "#f5f5f5"
highlight_fg = "#f2c744" highlight_fg = "#f2c744"
else: else:
bg, fg = "#ededf2", "#202020" bg, fg = "#ffffff", "#202020"
status_fg = "#1c1c1c" status_fg = "#1c1c1c"
highlight_fg = "#c56217" highlight_fg = "#c56217"
self.root.configure(bg=bg) # type: ignore[attr-defined] self.root.configure(bg=bg) # type: ignore[attr-defined]

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,20 +50,26 @@ 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()
current_frame = ttk.Frame(palette_frame)
current_frame.pack(side=tk.LEFT, padx=(0, 16))
ttk.Label(current_frame, text="Farbe:").pack(side=tk.LEFT, padx=(0, 6))
self.current_colour_sw = tk.Canvas( self.current_colour_sw = tk.Canvas(
palette_frame, current_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, pady=2)
self.current_colour_label = ttk.Label(palette_frame, text="Aktuelle Farbe") self.current_colour_label = ttk.Label(current_frame, text=f"({default_colour})")
self.current_colour_label.pack(side=tk.LEFT, padx=(0, 8)) self.current_colour_label.pack(side=tk.LEFT, padx=(6, 0))
ttk.Label(palette_frame, text="Beispielfarben:").pack(side=tk.LEFT, padx=(0, 8))
swatch_container = ttk.Frame(palette_frame) ttk.Label(palette_frame, text="Weitere Farben:").pack(side=tk.LEFT, padx=(0, 8))
swatch_container.pack(side=tk.LEFT) swatch_container = ttk.Frame(palette_frame)
swatch_container.pack(side=tk.LEFT)
for name, hex_code in self._preset_colours(): for name, hex_code in self._preset_colours():
self._add_palette_swatch(swatch_container, name, hex_code) self._add_palette_swatch(swatch_container, name, hex_code)
@ -514,6 +521,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