Этот модуль содержит два класса утилиты, которые упрощают ввод текста с помощью Pygame. Классы:
TextInputVisualizer , который можно использовать как для управления, так и для рисования текстового ввода. Просто передайте все события, возвращаемые pygame.event.get() в каждую кадр и бейте его атрибут surface на экране.TextInputManager , который можно использовать для простого управления введенным текстом, без визуального аспекта. Используется TextInputVisualizer за кулисами.Самый простой способ использования PYPI:
python3 -m pip install pygame-textinput
TextInputVisualizer Все аргументы для конструктора являются необязательными. После построения вызовите update каждого кадра со всеми событиями Pygame в качестве аргумента, а затем полюбите его surface на экране, например, так:
import pygame_textinput
import pygame
pygame . init ()
# Create TextInput-object
textinput = pygame_textinput . TextInputVisualizer ()
screen = pygame . display . set_mode (( 1000 , 200 ))
clock = pygame . time . Clock ()
while True :
screen . fill (( 225 , 225 , 225 ))
events = pygame . event . get ()
# Feed it with events every frame
textinput . update ( events )
# Blit its surface onto the screen
screen . blit ( textinput . surface , ( 10 , 10 ))
for event in events :
if event . type == pygame . QUIT :
exit ()
pygame . display . update ()
clock . tick ( 30 )Все аргументы необязательны.
| Аргумент | Описание |
|---|---|
| менеджер | TextInputManager используемый для управления входом |
| font_object | Объект pygame.font.Font , используемый для рендеринга |
| Antialias | сделать ли шрифт антиалиас или нет |
| font_color | цвет шрифта |
| CURSOR_BLINK_INTERVAL | Интервал курсора мигает, в MS |
| CURSOR_WIDTH | Ширина курсора, в пикселях |
| CURSOR_COLOR | Цвет курсора |
Все аргументы, приведенные выше, также являются полями, к которым можно получить доступ и изменить на лету, например, как это:
textinput . cursor_width = 12
textinput . value = "Hello, World!"
print ( textinput . font_color )| Поле | Описание |
|---|---|
| ценить | (строка) текст введен до сих пор |
| поверхность | Объект pygame.Surface с введенным текстом и курсором на нем и прозрачным фоном. Не может быть установлен. |
| cursor_visible | (Bool). Является ли курсор в настоящее время виден или нет. Переворачивает каждый cursor_interval MS, если update непрерывно называется обновлением. |
| Метод | Описание |
|---|---|
| Обновление (события) | Вызовите этот метод каждый кадр, пока должен быть обработан вход, а cursor_visible должен быть обновлен. |
for event in events :
...
if event . type == pygame . KEYDOWN and event . key == pygame . K_RETURN :
print ( "Oooweee" )pygame напрямую: pygame . key . set_repeat ( 200 , 25 ) # press every 50 ms after waiting 200 ms Эта новая версия также была оптимизирована таким образом, чтобы вы могли изменить любые поля на лету , и фактическая поверхность будет повторно рендеринг только в том случае, если вы получаете доступ к ней с помощью textinput.surface - и только в том случае, если вы фактически изменили любые значения.
TextInputManager Если вы предпочитаете нарисовать текст на экране самостоятельно, вы можете использовать TextInputManager только для управления строкой, которая была напечатана до сих пор.
Как TextInputVisualizer , вы подаете его метод update все события, полученные pygame.event.get() , который вы хотите, чтобы он обработал. TextInputVisualizer делает это для вас внутри своего метода update , если вы передаете его TextInputManager .
| Аргумент | Описание |
|---|---|
| исходный | Начальное значение (текст) |
| валидатор | Функция, принимающая string и возвращая bool . Каждый раз, когда вход изменяет значение, эта функция вызывается с измененным значением в качестве аргумента; Если функция возвращает True , вход принимается, в противном случае вход игнорируется. |
Так скажем, что вы хотите разрешить только до 5 букв, вы можете сделать это с
manager = TextInputManager ( validator = lambda input : len ( input ) <= 5 )| Поле | Описание |
|---|---|
| ценить | Вставленное значение до сих пор. При изменении, cursor_pos сохраняется как можно дальше. |
| CURSOR_POS | Положение курсора. 0 перед первым персонажем, len(manager.value) позиция после последней. Значения вне этого диапазона зажимаются. |
import pygame
import pygame . locals as pl
pygame . init ()
# No arguments needed to get started
textinput = TextInputVisualizer ()
# But more customization possible: Pass your own font object
font = pygame . font . SysFont ( "Consolas" , 55 )
# Create own manager with custom input validator
manager = TextInputManager ( validator = lambda input : len ( input ) <= 5 )
# Pass these to constructor
textinput_custom = TextInputVisualizer ( manager = manager , font_object = font )
# Customize much more
textinput_custom . cursor_width = 4
textinput_custom . cursor_blink_interval = 400 # blinking interval in ms
textinput_custom . antialias = False
textinput_custom . font_color = ( 0 , 85 , 170 )
screen = pygame . display . set_mode (( 1000 , 200 ))
clock = pygame . time . Clock ()
# Pygame now allows natively to enable key repeat:
pygame . key . set_repeat ( 200 , 25 )
while True :
screen . fill (( 225 , 225 , 225 ))
events = pygame . event . get ()
# Feed it with events every frame
textinput . update ( events )
textinput_custom . update ( events )
# Get its surface to blit onto the screen
screen . blit ( textinput . surface , ( 10 , 10 ))
screen . blit ( textinput_custom . surface , ( 10 , 50 ))
# Modify attributes on the fly - the surface is only rerendered when .surface is accessed & if values changed
textinput_custom . font_color = [( c + 10 ) % 255 for c in textinput_custom . font_color ]
# Check if user is exiting or pressed return
for event in events :
if event . type == pygame . QUIT :
exit ()
if event . type == pygame . KEYDOWN and event . key == pygame . K_RETURN :
print ( f"User pressed enter! Input so far: { textinput . value } " )
pygame . display . update ()
clock . tick ( 30 )