Исходный код 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