Modul ini menyediakan dua kelas utilitas yang menyederhanakan memasukkan teks menggunakan pygame. Kelasnya adalah:
TextInputVisualizer yang dapat digunakan untuk mengelola dan menggambar input teks. Cukup lulus semua acara yang dikembalikan oleh pygame.event.get() ke sana setiap bingkai, dan blit atribut surface di layar.TextInputManager yang dapat digunakan untuk hanya mengelola teks yang dimasukkan, tanpa aspek visual. Digunakan oleh TextInputVisualizer di belakang layar.Cara paling sederhana adalah menggunakan PYPI:
python3 -m pip install pygame-textinput
TextInputVisualizer Semua argumen untuk konstruktor adalah opsional. Setelah dibangun, telepon update setiap bingkai dengan semua peristiwa pygame sebagai argumen, lalu blit bidang surface ke layar, seperti itu:
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 )Semua argumen adalah opsional.
| Argumen | Keterangan |
|---|---|
| manajer | TextInputManager yang digunakan untuk mengelola input |
| font_object | Objek pygame.font.Font yang digunakan untuk rendering |
| Antialias | apakah akan membuat font antialiased atau tidak |
| font_color | warna font yang diberikan |
| Cursor_blink_interval | Interval kursor berkedip, dalam ms |
| Cursor_width | Lebar kursor, dalam piksel |
| CURSOR_COLOR | Warna kursor |
Semua argumen di atas juga merupakan bidang yang dapat diakses dan dimodifikasi dengan cepat, misalnya seperti ini:
textinput . cursor_width = 12
textinput . value = "Hello, World!"
print ( textinput . font_color )| Bidang | Keterangan |
|---|---|
| nilai | (String) Teks yang dimasukkan sejauh ini |
| permukaan | Objek pygame.Surface dengan teks & kursor yang dimasukkan di atasnya dan latar belakang transparan. Tidak bisa diatur. |
| Cursor_visible | (bool) apakah kursor saat ini terlihat atau tidak. Membalik setiap cursor_interval MS selama update disebut terus menerus. |
| Metode | Keterangan |
|---|---|
| UPDATE (acara) | Panggil metode ini setiap bingkai selama input harus diproses dan cursor_visible harus diperbarui. |
for event in events :
...
if event . type == pygame . KEYDOWN and event . key == pygame . K_RETURN :
print ( "Oooweee" )pygame secara langsung: pygame . key . set_repeat ( 200 , 25 ) # press every 50 ms after waiting 200 ms Versi baru ini juga telah dioptimalkan sedemikian rupa sehingga Anda dapat memodifikasi bidang apa pun dengan cepat dan permukaan aktual hanya akan menata ulang jika Anda mengaksesnya menggunakan textinput.surface - dan hanya jika Anda benar -benar memodifikasi nilai apa pun.
TextInputManager Jika Anda lebih suka menggambar teks di layar sendiri, Anda dapat menggunakan TextInputManager untuk hanya mengelola string yang telah diketik sejauh ini.
Seperti TextInputVisualizer , Anda memberi makan metode update semua peristiwa yang diterima oleh pygame.event.get() yang Anda inginkan untuk diproses. TextInputVisualizer melakukan ini untuk Anda di dalam metode update jika Anda melewatkannya TextInputManager .
| Argumen | Keterangan |
|---|---|
| awal | Nilai awal (teks) |
| validator | Fungsi mengambil string dan mengembalikan bool . Setiap kali input memodifikasi nilai, fungsi ini dipanggil dengan nilai yang dimodifikasi sebagai argumen; Jika fungsi mengembalikan True , input diterima, jika tidak input diabaikan. |
Jadi katakanlah Anda hanya ingin mengizinkan input hingga 5 huruf, Anda bisa melakukannya
manager = TextInputManager ( validator = lambda input : len ( input ) <= 5 )| Bidang | Keterangan |
|---|---|
| nilai | Nilai yang dimasukkan sejauh ini. Saat berubah, cursor_pos disimpan sejauh mungkin. |
| CURSOR_POS | Posisi kursor. 0 adalah sebelum karakter pertama, len(manager.value) posisi setelah yang terakhir. Nilai di luar kisaran ini dijepit. |
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 )