Package: pygame-vkeyboard
pygame-vkeyboardVisual keyboard for Pygame engine. Aims to be easy to use as highly customizable as well.Installpipinstallpygame-vkeyboardBasic usageVKeyboardonly require a pygame surface to be displayed on and a text consumer function, as in the following example :frompygame_vkeyboardimport*# Initializes your window object or surface your want# vkeyboard to be displayed on top of.surface=...defconsumer(text):print('Current text :%s'%text)# Initializes and activates vkeyboardlayout=VKeyboardLayout(VKeyboardLayout.AZERTY)keyboard=VKeyboard(surface,consumer,layout)The keyboard has the following optional parameters:show_text: display a text bar with the current textrenderer: define a custom renderer (see chapter below)special_char_layout: define a custom layout for special charactersjoystick_navigation: enable navigation using a joystickEvent managementAVKeyboardobject handles the following pygame event :MOUSEBUTTONDOWNMOUSEBUTTONUPFINGERDOWNFINGERUPKEYDOWNKEYUPJOYHATMOTIONJOYBUTTONDOWNJOYBUTTONUPIn order to process those events, keyboard instance event handling method should be called like in the following example:whileTrue:events=pygame.event.get()# Update internal variableskeyboard.update(events)# Draw the keyboardkeyboard.draw(surface)## Perform other tasks here## Update the displaypygame.display.flip()It will update key state accordingly as the keyboard buffer as well.
The buffer modification will be notified through the keyboard text consumer function.The global performances can be improved avoiding to flip the entire display
at each loop by using thepygame.display.update()function.whileTrue:# Draw the keyboardrects=keyboard.draw(surface)# Update only the dirty rectangles of the displaypygame.display.update(rects)Note:thesurfaceparameter of thedraw()method is optional, it is used to clear/hide the keyboard when it is necessary and may be mandatory if the surface has changed.Customize layoutThe keyboard layout is the model that indicates keys are displayed and how they are dispatched
across the keyboard space. It consists in aVKeyboardLayoutobject which is built using list of string,
each string corresponding to a keyboard key row.VkeyboardLayoutconstructor signature is defined as following :def__init__(self,model,key_size=None,padding=5,height_ratio=None,allow_uppercase=True,allow_special_chars=True,allow_space=True)If thekey_sizeorheight_ratioparameters are not provided, they will be computed dynamically regarding of
the target surface the keyboard will be rendered into (height_ratiois 50% by default).In order to only display a numericalVkeyboardfor example, you can use a custom layout like this :model=['123','456','789','0']layout=VKeyboardLayout(model)Custom rendering using VKeyboardRendererIf you want to customize keyboard rendering you could provide aVKeyboardRendererinstance atVKeyboardconstruction.keyboard=VKeyboard(surface,consumer,layout,renderer=VKeyboardRenderer.DARK)Here is the list of default renderers provided withpygame-vkeyboard:VKeyboardRenderer.DEFAULTVKeyboardRenderer.DARKA customVKeyboardRenderercan be built using following constructor :renderer=VKeyboardRenderer(# Key font name/path.'arial',# Text color for key and text box (one per state: released, pressed).((0,0,0),(255,255,255)),# Text box cursor color.(0,0,0),# Color to highlight the selected key.(20,200,98),# Keyboard background color.(50,50,50),# Key background color (one per state, as for the text color).((255,255,255),(0,0,0)),# Text input background color.(220,220,220),# Optional special key text color (one per state, as for the text color).((0,250,0),(255,255,255)),# Optional special key background color (one per state, as for the text color).((255,255,255),(0,0,0)),)Please note that the default renderer implementation require a unicode font.You can also create your own renderer. Just overrideVKeyboardRendererclass and override any of the following methods :draw_background(surface): Draws the background of the keyboard.draw_text(surface, text): Draws the text of the text input box.draw_cursor(surface, cursor): Draws the cursor of the text input box.draw_character_key(surface, key, special=False): Draws a key based on character value.draw_space_key(surface, key): Draws space bar.draw_back_key(surface, key): Draws back key.draw_uppercase_key(surface, key): Draw uppercase switch key.draw_special_char_key(surface, key): Draw special character switch key.Getting/Setting dataSeveral information can be retrieved from the keyboard:keyboard=VKeyboard(...)# Get a pygame.Rect object in which the keyboard is included.keyboard.get_rect()# Get the current text.keyboard.get_text()# Set the current text (clear the existing one).keyboard.set_text("Hello world!")# Enable the keyboard, it will be displayed on next keyboard.draw() call.keyboard.enable()# Return True if the keyboard is enabled (thus displayed at screen).keyboard.is_enabled()# Disable and hide the keyboard (keyboard.update() and keyboard.draw() have no effect).keyboard.disable()Run examplesSeveral examples are provided with thepygame_vkeyboardlibrary.
To run the examples, simply execute these commands in a terminal:python-mpygame_vkeyboard.examples.azerty
python-mpygame_vkeyboard.examples.numeric
python-mpygame_vkeyboard.examples.textinput
python-mpygame_vkeyboard.examples.resizeContributingIf you develop you own renderer please share it ! I will keep a collection of rendering class in this repository.
Don't hesitate to report bug, feedback, suggestion into the repository issues section.