توفر هذه الوحدة فئتين من الأداة المساعدة تبسيط إدخال النص باستخدام 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 | الفاصل الزمني للمؤشر الوامض ، في مرض التصلب العصبي المتعدد |
| Cursor_Width | عرض المؤشر ، بالبكسل |
| Cursor_Color | لون المؤشر |
جميع الحجج المذكورة أعلاه هي أيضًا حقول يمكن الوصول إليها وتعديلها أثناء الطيران ، مثل هذا:
textinput . cursor_width = 12
textinput . value = "Hello, World!"
print ( textinput . font_color )| مجال | وصف |
|---|---|
| قيمة | (سلسلة) تم إدخال النص حتى الآن |
| سطح | كائن pygame.Surface مع نص و مؤشر على ذلك وخلفية شفافة. لا يمكن ضبطها. |
| cursor_visible | (Bool) Wether المؤشر مرئي حاليًا أم لا. يقلب كل ms cursor_interval طالما أن 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 )