Compare commits
3 Commits
382bccaedd
...
b4b6fa4e87
| Author | SHA1 | Date |
|---|---|---|
|
|
b4b6fa4e87 | |
|
|
a5d2aacdf6 | |
|
|
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)
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue