Исходный код EJIO.ctk_extender.windows.popup.color
## /ctk_extender/windows/popup/color.py
import customtkinter as ctk
from typing import Any
from .base import BasePopup
from ...components import ColorPicker
from ...widget import PackStrategy
from EJIO.utils import Color, _
__all__ = ['ColorPickerPopup']
[документация]
class ColorPickerPopup(BasePopup):
"""Модальный диалог для интерактивного выбора цвета."""
__slots__ = ('chosen_color', 'is_confirmed')
def __init__(self, title: str, initial_color: str | Color, master: Any = None) -> None:
self.chosen_color: Color = initial_color if isinstance(initial_color, Color) else Color(initial_color)
self.is_confirmed: bool = False
super().__init__(title, width=420, height=130, modal=True, master=master)
[документация]
def build_content(self) -> None:
self.add_widget(
ColorPicker,
initial_color=self.chosen_color,
on_change=self._on_color_changed,
geometry=PackStrategy(pady=(15, 10), padx=15, fill="x")
)
btn_frame = ctk.CTkFrame(self.container, fg_color="transparent")
btn_frame.pack(side="bottom", pady=10, fill="x")
ctk.CTkFrame(btn_frame, fg_color="transparent", width=0, height=0).pack(side="left", expand=True, fill="both")
ctk.CTkButton(
btn_frame,
text=_("ctk_extender.builtins.popup.select"),
width=90,
height=28,
command=self._confirm
).pack(side="left", padx=5)
ctk.CTkButton(
btn_frame,
text=_("ctk_extender.builtins.popup.cancel"),
width=90,
height=28,
fg_color="#6B7280",
hover_color="#4B5563",
command=self.destroy
).pack(side="left", padx=5)
ctk.CTkFrame(btn_frame, fg_color="transparent", width=0, height=0).pack(side="left", expand=True, fill="both")
def _on_color_changed(self, new_color: Color) -> None:
self.chosen_color = new_color
def _confirm(self) -> None:
self.is_confirmed = True
self.destroy()