You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/API_REFERENCE.md
+26Lines changed: 26 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -115,6 +115,32 @@ validate_dict(
115
115
)
116
116
```
117
117
118
+
## Поля ввода (input_validation)
119
+
120
+
Модуль `spritePro.input_validation` — типизированный ввод и парсинг для текстовых полей (TextInput и редактор сцен). Типы: **text**, **int**, **float**.
Проверяет, можно ли добавить символ `ch` в строку `current` для данного типа поля. Для `"text"` при `allowed_text_chars=None` допускаются любые печатные символы; если передано множество символов — только они (например, для поля «имя» в редакторе).
Фильтрует строку `text` (например из буфера обмена), оставляя только допустимые для типа поля символы. Для int — цифры и один минус в начале; для float — цифры, минус, одна точка.
Парсит строку в значение. Возвращает `(ok: bool, value: Any)` — для int/float значение с учётом min_val/max_val, для text — `raw.strip()`. При ошибке парсинга — `(False, None)`.
133
+
134
+
**Пример:**
135
+
```python
136
+
from spritePro.input_validation import parse_input_value, InputType
137
+
138
+
ok, num = parse_input_value("int", "42", 0, 100) # (True, 42)
139
+
ok, x = parse_input_value("float", "3.14", 0.0, 10.0) # (True, 3.14)
Copy file name to clipboardExpand all lines: docs/text_input.md
+36-6Lines changed: 36 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,13 @@
1
1
# TextInput
2
2
3
-
Поле ввода текста на базе Button. Наследует от Button, при клике переходит в режим ввода (focus); поддерживает `pygame.TEXTINPUT`, Enter (подтверждение) и Escape (сброс фокуса).
3
+
Поле ввода текста на базе Button. Наследует от Button, при клике переходит в режим ввода (focus); поддерживает типы **text** / **int** / **float**, `pygame.TEXTINPUT`, Enter (подтверждение), Escape (сброс фокуса), **Ctrl+V** (вставка) и **Ctrl+C** (копирование содержимого поля).
4
4
5
5
## Обзор
6
6
7
7
-**Наследование**: `TextInput(Button)` — кнопка без анимаций, при клике активирует ввод.
8
-
-**События**: **on_change** — при каждом изменении текста (ввод/удаление символа); **on_submit** — при нажатии Enter (применение/подтверждение).
9
-
-**Обработка в цикле**: обрабатывает клик (фокус/сброс), `KEYDOWN` (Enter, Escape, Backspace, цифровая клавиатура), `TEXTINPUT` (символы); события берутся из `spritePro.pygame_events` в `update()`.
8
+
-**Тип поля**: `input_type`: **"text"** (любой печатный текст), **"int"** (целые числа), **"float"** (дробные). Для int/float некорректные символы не вводятся и отфильтровываются при вставке; при необходимости задают границы `min_val` / `max_val`.
9
+
-**События**: **on_change** — при каждом изменении текста; **on_submit** — при нажатии Enter.
10
+
-**Обработка в цикле**: обрабатывает клик, `KEYDOWN` (Enter, Escape, Backspace, Ctrl+V/Ctrl+C, цифровая клавиатура), `TEXTINPUT`; события из `spritePro.pygame_events` в `update()`.
10
11
11
12
## Параметры конструктора
12
13
@@ -17,19 +18,31 @@
17
18
|`placeholder`| str | "" | Текст-подсказка при пустом значении |
18
19
|`value`| str | "" | Начальное значение |
19
20
|`max_length`| int | 128 | Максимальная длина |
20
-
|`on_change`| Callable[[str], None]| None | Вызывается при каждом изменении текста (ввод/удаление символа) |
21
-
|`on_submit`| Callable[[str], None]| None | Вызывается при нажатии Enter (применение/подтверждение) |
21
+
|`input_type`| "text" \| "int" \| "float" | "text" | Тип поля: текст, целое или дробное число |
22
+
|`min_val`| float \| None | None | Нижняя граница для int/float (при парсинге) |
23
+
|`max_val`| float \| None | None | Верхняя граница для int/float (при парсинге) |
24
+
|`on_change`| Callable[[str], None]| None | Вызывается при каждом изменении текста |
25
+
|`on_submit`| Callable[[str], None]| None | Вызывается при нажатии Enter |
22
26
|`text_color`| (int,int,int) | (200,200,200) | Цвет текста |
23
27
|`bg_color`| (int,int,int) | (45,45,52) | Цвет фона |
24
28
|`active_bg_color`| (int,int,int) | (55,55,62) | Цвет фона при фокусе |
25
29
|`font_size`| int | 18 | Размер шрифта |
26
30
|`sorting_order`| int | 1000 | Слой отрисовки |
27
31
|`scene`| Scene \| str \| None | None | Сцена |
28
32
33
+
## Типы поля (input_type)
34
+
35
+
-**text** — допускаются любые печатные символы, пробел и табуляция. Подходит для имён, сообщений.
36
+
-**int** — только цифры и один минус в начале. Точка и запятая не вводятся; при вставке из буфера лишние символы отфильтровываются.
37
+
-**float** — цифры, один минус в начале, одна десятичная точка (запятая при вставке заменяется на точку).
38
+
39
+
Для числовых полей при применении (например в `on_submit`) удобно парсить значение через модуль **spritePro.input_validation**: `parse_input_value(input_type, raw, min_val, max_val)` возвращает `(ok, value)`.
40
+
29
41
## Пример
30
42
31
43
```python
32
44
import spritePro as s
45
+
from spritePro.input_validation import parse_input_value
33
46
34
47
classFormScene(s.Scene):
35
48
def__init__(self):
@@ -44,12 +57,26 @@ class FormScene(s.Scene):
44
57
on_submit=self._on_submit,
45
58
scene=self,
46
59
)
60
+
self.num_input = s.TextInput(
61
+
pos=(s.WH_C.x, 260),
62
+
value="0",
63
+
input_type="int",
64
+
min_val=0,
65
+
max_val=100,
66
+
on_submit=self._on_number_submit,
67
+
scene=self,
68
+
)
47
69
48
70
def_on_change(self, value: str) -> None:
49
71
print("Текст:", value)
50
72
51
73
def_on_submit(self, value: str) -> None:
52
74
print("Отправлено:", value)
75
+
76
+
def_on_number_submit(self, value: str) -> None:
77
+
ok, num = parse_input_value("int", value, 0, 100)
78
+
if ok and num isnotNone:
79
+
print("Число:", num)
53
80
```
54
81
55
82
## События: изменение и применение
@@ -64,7 +91,9 @@ class FormScene(s.Scene):
64
91
-**Enter** — сброс фокуса и вызов `on_submit(value)`.
65
92
-**Escape** — сброс фокуса без вызова `on_submit`.
66
93
-**Backspace** — удаление последнего символа.
67
-
-**TEXTINPUT** и цифровая клавиатура — добавление символов (с учётом `max_length`).
94
+
-**Ctrl+V** (Cmd+V на Mac) — вставка из буфера обмена; для int/float вставляются только допустимые символы.
95
+
-**Ctrl+C** (Cmd+C на Mac) — копирование содержимого поля в буфер обмена.
96
+
-**TEXTINPUT** и цифровая клавиатура — добавление символов (для int/float только допустимые, с учётом `max_length`).
68
97
69
98
## Методы
70
99
@@ -78,3 +107,4 @@ class FormScene(s.Scene):
78
107
-[Button](button.md) — базовая кнопка.
79
108
-[Slider](slider.md) — слайдер.
80
109
-[Input](input.md) — состояние клавиш и мыши.
110
+
- Модуль **spritePro.input_validation** — `InputType`, `can_add_char`, `filter_chars_for_paste`, `parse_input_value` для типизированного ввода и парсинга (используется TextInput и редактором сцен).
0 commit comments