Исходный код EJIO.ctk_extender.widget.components.tabview

## /ctk_extender/widget/components/tabview.py

import customtkinter as ctk
from typing import Any
from loguru import logger
from ..base import Widget
from ..container import WidgetContainer
from ..geometry import GeometryStrategy

__all__ = ['Tabview']


[документация] class Tabview(WidgetContainer): """Компонент многовкладочного интерфейса (на базе ctk.CTkTabview).""" def __init__( self, parent: Any, tabs: list[str], geometry: GeometryStrategy | None = None, **kwargs: Any ) -> None: self._tabs = tabs self._kwargs = kwargs super().__init__(parent, geometry)
[документация] def build(self) -> ctk.CTkTabview: tabview = ctk.CTkTabview(self.parent, **self._kwargs) # Сразу создаем переданные вкладки в рантайме for tab_name in self._tabs: tabview.add(tab_name) return tabview
[документация] def add_widget_to_tab[W: Widget]( self, tab_name: str, widget_cls: type[W], *args: Any, **kwargs: Any ) -> W: """ Фабричный метод для добавления виджета на конкретную вкладку компонента Tabview. :param tab_name: Имя вкладки. :param widget_cls: Виджет для добавления. :param args: Аргументы для инициализации виджета. :param kwargs: Ключевые аргументы для инициализации виджета. """ try: # Получаем внутренний фрейм конкретной вкладки Tkinter tab_frame = getattr(self.ctk_instance, 'tab')(tab_name) # Инстанцируем виджет, передавая фрейм вкладки как parent new_widget = widget_cls(tab_frame, *args, **kwargs) self._children.append(new_widget) return new_widget except Exception as e: logger.error(f"Failed to add widget {widget_cls.__name__} to tab '{tab_name}': {e}") raise