Исходный код EJIO.ctk_extender.widget.form.fields.textbox
## /ctk_extender/widget/form/fields/textbox.py
import customtkinter as ctk
from typing import Any
from ...base import Widget
from ...geometry import GeometryStrategy
from .base import InputField
__all__ = [
'FormTextBox',
]
[документация]
class FormTextBox(Widget, InputField):
"""Многострочное текстовое поле ввода для формы (на базе ctk.CTkTextbox)."""
def __init__(
self,
parent: Any,
name: str,
required: bool = False,
geometry: GeometryStrategy | None = None
) -> None:
self._name: str = name
self._required: bool = required
super().__init__(parent, geometry)
[документация]
def build(self) -> ctk.CTkTextbox:
return ctk.CTkTextbox(self.parent)
@property
def name(self) -> str:
return self._name
[документация]
def get_value(self) -> str:
# Извлекаем текст от первой строки и нулевого символа до самого конца,
# обрезая дефолтный системный перенос строки (\n) на конце.
return str(getattr(self.ctk_instance, 'get')("1.0", "end-1c"))
[документация]
def set_value(self, value: Any) -> None:
instance = self.ctk_instance
getattr(instance, 'delete')("1.0", "end")
getattr(instance, 'insert')("1.0", str(value))
[документация]
def clear(self) -> None:
getattr(self.ctk_instance, 'delete')("1.0", "end")
[документация]
def validate(self) -> str | None:
if self._required and not self.get_value().strip():
return f"Поле '{self._name}' не должно быть пустым."
return None