Исходный код EJIO.ctk_extender.windows.popup.date
## /ctk_extender/windows/popup/date.py
import datetime
import customtkinter as ctk
from typing import Any
from .base import BasePopup
from ...components import DatePicker
from ...widget import PackStrategy
from EJIO.utils import _
__all__ = ['DatePickerPopup']
[документация]
class DatePickerPopup(BasePopup):
"""Модальный диалог-календарь для выбора даты."""
__slots__ = ('selected_date', 'is_confirmed')
def __init__(
self,
title: str,
initial_date: datetime.date | None = None,
master: Any = None
) -> None:
self.selected_date: datetime.date = initial_date or datetime.date.today()
self.is_confirmed: bool = False
super().__init__(title, width=280, height=300, modal=True, master=master)
[документация]
def build_content(self) -> None:
self.add_widget(
DatePicker,
initial_date=self.selected_date,
on_select=self._on_date_changed,
geometry=PackStrategy(pady=10, padx=10, fill="both", expand=True)
)
btn_frame = ctk.CTkFrame(self.container, fg_color="transparent")
btn_frame.pack(side="bottom", pady=(0, 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=80,
height=26,
command=self._confirm
).pack(side="left", padx=5)
ctk.CTkButton(
btn_frame,
text=_("ctk_extender.builtins.popup.cancel"),
width=80,
height=26,
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_date_changed(self, new_date: datetime.date) -> None:
self.selected_date = new_date
def _confirm(self) -> None:
self.is_confirmed = True
self.destroy()