Ce module fournit deux classes utilitaires qui simplifient la saisie du texte à l'aide de pygame. Les cours sont:
TextInputVisualizer qui peut être utilisé pour gérer et dessiner une entrée de texte. Passez simplement tous les événements renvoyés par pygame.event.get() à chaque trame, et lancez son attribut surface à l'écran.TextInputManager qui peut être utilisé pour simplement gérer le texte entré, sans aspect visuel. Utilisé par TextInputVisualizer dans les coulisses.La manière la plus simple consiste à utiliser PYPI:
python3 -m pip install pygame-textinput
TextInputVisualizer Tous les arguments au constructeur sont facultatifs. Une fois construit, appelez update chaque trame avec tous les événements pygame comme argument, puis blisez son champ surface à l'écran, comme ainsi:
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 )Tous les arguments sont facultatifs.
| Argument | Description |
|---|---|
| directeur | Le TextInputManager a utilisé pour gérer l'entrée |
| Font_Object | L'objet pygame.font.Font utilisé pour le rendu |
| antialias | que ce soit pour rendre la police antialiasée ou non |
| font_color | couleur de police rendue |
| cursor_blink_interval | L'intervalle du curseur clignote, en ms |
| cursor_width | La largeur du curseur, en pixels |
| cursor_color | La couleur du curseur |
Tous les arguments ci-dessus sont également des champs accessibles et modifiés à la volée, par exemple comme ceci:
textinput . cursor_width = 12
textinput . value = "Hello, World!"
print ( textinput . font_color )| Champ | Description |
|---|---|
| valeur | (String) Le texte entré jusqu'à présent |
| surface | L'objet pygame.Surface avec le texte et le curseur entrés dessus et un arrière-plan transparent. Ne peut pas être défini. |
| cursor_visible | (bool) si le curseur est actuellement visible ou non. Flips chaque cursor_interval MS tant que update est appelée continuellement. |
| Méthode | Description |
|---|---|
| Mise à jour (événements) | Appelez cette méthode chaque trame pendant aussi longtemps que la saisie doit être traitée et cursor_visible doit être mise à jour. |
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 Cette nouvelle version a également été optimisée de sorte que vous pouvez modifier tous les champs à la volée et que la surface réelle ne renforcera que si vous y accédez à l'aide de textinput.surface - et uniquement si vous modifiez réellement des valeurs.
TextInputManager Si vous préférez dessiner le texte sur l'écran vous-même, vous pouvez utiliser TextInputManager pour gérer uniquement la chaîne qui a été tapée jusqu'à présent.
Comme TextInputVisualizer , vous alimentez sa méthode update tous les événements reçus par pygame.event.get() que vous voulez qu'il traite. TextInputVisualizer le fait pour vous dans sa méthode update si vous lui transmettez un TextInputManager .
| Argument | Description |
|---|---|
| initial | La valeur initiale (texte) |
| validateur | Une fonction prenant une string et renvoyant un bool . Chaque fois qu'une entrée modifie la valeur, cette fonction est appelée avec la valeur modifiée comme argument; Si la fonction renvoie True , l'entrée est acceptée, sinon l'entrée est ignorée. |
Alors, dites que vous voulez autoriser la contribution à jusqu'à 5 lettres, vous pouvez le faire avec
manager = TextInputManager ( validator = lambda input : len ( input ) <= 5 )| Champ | Description |
|---|---|
| valeur | La valeur insérée jusqu'à présent. Lors du changement, cursor_pos est conservé autant que possible. |
| cursor_pos | La position du curseur. 0 est avant le premier caractère, len(manager.value) la position après la dernière. Les valeurs en dehors de cette plage sont serrées. |
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 )