Исходный код EJIO.ctk_extender.widget.form.fields.text

## /ctk_extender/widget/form/fields/text.py

import customtkinter as ctk
from typing import Any
from ...base import Widget
from ...geometry import GeometryStrategy
from .base import InputField

__all__ = [
    'FormTextField',
]


[документация] class FormTextField(Widget, InputField): """Текстовое поле ввода для формы (на базе ctk.CTkEntry)."""#TODO: о всех базовых виджетах прокидывать kwargs в конструктор ctk __slots__ = ('_name', '_placeholder', '_required') def __init__( self, parent: Any, name: str, placeholder: str = "", required: bool = False, geometry: GeometryStrategy | None = None, **kwargs: Any, ) -> None: self._name: str = name self._placeholder: str = placeholder self._required: bool = required super().__init__(parent, geometry, **kwargs)
[документация] def build(self) -> ctk.CTkEntry: return ctk.CTkEntry(self.parent, placeholder_text=self._placeholder, **self._kwargs)
@property def name(self) -> str: return self._name
[документация] def get_value(self) -> str: return str(getattr(self.ctk_instance, 'get')())
[документация] def set_value(self, value: Any) -> None: instance = self.ctk_instance getattr(instance, 'delete')(0, 'end') getattr(instance, 'insert')(0, str(value))
[документация] def clear(self) -> None: getattr(self.ctk_instance, 'delete')(0, 'end')
[документация] def validate(self) -> str | None: if self._required and not self.get_value().strip(): return f"Field '{self._name}' required to fill out." return None