Dieses Modul enthält zwei Dienstprogrammklassen, die den Eingabetxt mithilfe von Pygame vereinfachen. Die Klassen sind:
TextInputVisualizer mit dem verwendet werden kann, um die Texteingabe sowohl verwalten als auch zu zeichnen. Übergeben Sie einfach alle von pygame.event.get() zurückgegebenen Ereignisse an jeden Rahmen und blühen Sie sein surface auf dem Bildschirm an.TextInputManager , mit dem nur eingaberten Text verwaltet werden kann, ohne visuellen Aspekt. Verwendet von TextInputVisualizer hinter den Kulissen.Der einfachste Weg ist die Verwendung von PYPI:
python3 -m pip install pygame-textinput
TextInputVisualizer Alle Argumente an den Konstruktor sind optional. Nachdem er konstruiert ist, rufen Sie jeden Frame mit allen Pygame -Ereignissen als Argument update und blicken Sie dann auf dem surface , wie dies:
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 )Alle Argumente sind optional.
| Argument | Beschreibung |
|---|---|
| Manager | Der TextInputManager verwaltet die Eingabe |
| font_object | Das zum Rendern verwendete pygame.font.Font -Objekt |
| Antialias | ob Sie die Schrift antialias rendern oder nicht |
| font_color | Farbe der Schriftart rendern |
| cursor_blink_interval | Das Intervall des Cursors blinkt, in MS |
| Cursor_Width | Die Breite des Cursors in Pixeln |
| Cursor_Color | Die Farbe des Cursors |
Alle oben genannten Argumente sind auch Felder, auf die im laufenden Fliegen zugegriffen und geändert werden kann, z. B. folgendermaßen:
textinput . cursor_width = 12
textinput . value = "Hello, World!"
print ( textinput . font_color )| Feld | Beschreibung |
|---|---|
| Wert | (Zeichenfolge) Der bisher eingegebene Text |
| Oberfläche | Das pygame.Surface -Oberflächenobjekt mit eingegebenem Text & Cursor darauf und einem transparenten Hintergrund. Kann nicht eingestellt werden. |
| Cursor_visible | (bool) Was der Cursor derzeit sichtbar ist oder nicht. Flippt jeden cursor_interval MS, solange update kontinuierlich aufgerufen wird. |
| Verfahren | Beschreibung |
|---|---|
| Update (Ereignisse) | Rufen Sie diese Methode auf, so lange wie die Eingabe verarbeitet und cursor_visible aktualisiert werden sollte. |
for event in events :
...
if event . type == pygame . KEYDOWN and event . key == pygame . K_RETURN :
print ( "Oooweee" )pygame aktiviert werden können: pygame . key . set_repeat ( 200 , 25 ) # press every 50 ms after waiting 200 ms Diese neue Version wurde auch optimiert, sodass Sie alle Felder im laufenden Fliegen ändern können, und die tatsächliche Oberfläche wird nur dann erneut rendern, wenn Sie mit textinput.surface darauf zugreifen - und nur, wenn Sie tatsächlich Werte geändert haben.
TextInputManager Wenn Sie es vorziehen, den Text selbst auf dem Bildschirm zu zeichnen, können Sie TextInputManager verwenden, um nur die bisher eingegebene Zeichenfolge zu verwalten.
Wie mit TextInputVisualizer füttern Sie seine update alle von pygame.event.get() empfangenen Ereignisse, die sie verarbeiten sollen. TextInputVisualizer erledigt dies für Sie in seiner update , wenn Sie ihm einen TextInputManager übergeben.
| Argument | Beschreibung |
|---|---|
| anfänglich | Der Anfangswert (Text) |
| Validator | Eine Funktion, die eine string übernimmt und einen bool zurückgibt. Jedes Mal, wenn eine Eingabe den Wert ändert, wird diese Funktion mit dem geänderten Wert als Argument aufgerufen. Wenn die Funktion True , wird die Eingabe akzeptiert, andernfalls wird die Eingabe ignoriert. |
Sagen Sie also, Sie möchten die Eingabe nur auf bis zu 5 Buchstaben zulassen, Sie könnten das mit dem tun
manager = TextInputManager ( validator = lambda input : len ( input ) <= 5 )| Feld | Beschreibung |
|---|---|
| Wert | Der bisher eingefügte Wert. Bei der Änderung wird cursor_pos so weit wie möglich gehalten. |
| Cursor_Pos | Die Position des Cursors. 0 ist vor dem ersten Charakter, len(manager.value) die Position nach dem letzten. Die Werte außerhalb dieses Bereichs sind geklemmt. |
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 )