.. module:: pygame_menu.themes
:py:mod:`pygame-menu` offers many parameters to control the visual aspect of the
menu. For an easier usage, all of them are gathered in a specific object called
a theme
. It is used to customize the menu window itself and all its widgets.
menu = pygame_menu.Menu(
height=300,
theme=pygame_menu.themes.THEME_BLUE,
title='Welcome',
width=400
)
Note
The theme parameters can be overwritten locally when adding a widget to the menu. See the overwritable ones in the :ref:`add... methods <Adding widgets>`
Several predefined themes are proposed by :py:mod:`pygame-menu`.
If none of the proposed theme fit to the needs, the :py:class:`Theme` give the opportunity to create custom themes.
mytheme = Theme(background_color=(0, 0, 0, 0), # transparent background
title_background_color=(4, 47, 126),
title_font_shadow=True,
widget_padding=25,
...)
menu = Menu(..., theme=mytheme)
Of course it is also possible to start from a predefined theme by copying it first.
mytheme = pygame_menu.themes.THEME_ORANGE.copy()
mytheme.title_background_color=(0, 0, 0)
menu = Menu(..., theme=mytheme)
The alignment (str) can take one of the three following values:
Alignment | Description |
---|---|
:py:data:`pygame_menu.locals.ALIGN_LEFT` | Left alignment |
:py:data:`pygame_menu.locals.ALIGN_CENTER` | Center alignment |
:py:data:`pygame_menu.locals.ALIGN_RIGHT` | Right alignment |
Theme background can be both a color or an image. All colors can be defined using a tuple or a list of 3 or 4 numbers between 0 and 255. The format of the numbers are:
color_opaque = (R, G, B)
color_transparent = (R, G, B, A)
A alpha channels goes from 0 to 255. 0 is transparent, 255 is opaque. For using images as a background color, class :py:class:`pygame_menu.baseimage.BaseImage` must be used.
Images needs a Path (file location on disk), a drawing mode, and an optional offset.
myimage = pygame_menu.baseimage.BaseImage(
image_path=pygame_menu.baseimage.IMAGE_EXAMPLE_GRAY_LINES,
drawing_mode=pygame_menu.baseimage.IMAGE_MODE_REPEAT_XY,
offset=(0,0)
)
mytheme.background_color = myimage
Image drawing modes | Description |
---|---|
:py:data:`pygame_menu.baseimage.IMAGE_MODE_CENTER` | Centers the image in the surface |
:py:data:`pygame_menu.baseimage.IMAGE_MODE_FILL` | Fill the image on the surface |
:py:data:`pygame_menu.baseimage.IMAGE_MODE_REPEAT_X` | Repeat the image on x axis |
:py:data:`pygame_menu.baseimage.IMAGE_MODE_REPEAT_XY` | Repeat the image on x and y axis |
:py:data:`pygame_menu.baseimage.IMAGE_MODE_REPEAT_Y` | Repeat the image on y axis |
:py:data:`pygame_menu.baseimage.IMAGE_MODE_SIMPLE` | Write the image on top-left location |
Currently, :py:class:`Theme` class only supports images for :py:attr:`background_color` and :py:attr:`widget_background_color`. Also, only IMAGE_MODE_FILL drawing mode is valid for :py:attr:`widget_background_color`.
This library also has some fonts to use (TTF format). To load a font, run this code:
import pygame_menu
font = pygame_menu.font.FONT_NAME
my_theme = Theme(widget_font=font, ...)
System fonts can also be used. The available system fonts can be listed using the following command in a python shell:
import pygame
print(pygame.font.get_fonts())
The visual style of the menubar is managed using the theme parameter
title_bar_style
which can take the following values:
Several possible positions are accepted by some configurations:
Position | Description |
---|---|
:py:data:`pygame_menu.locals.POSITION_EAST` | East position |
:py:data:`pygame_menu.locals.POSITION_NORTH` | North position |
:py:data:`pygame_menu.locals.POSITION_NORTHEAST` | North/East position |
:py:data:`pygame_menu.locals.POSITION_NORTHWEST` | North/West position |
:py:data:`pygame_menu.locals.POSITION_SOUTH` | South position |
:py:data:`pygame_menu.locals.POSITION_SOUTHEAST` | South/East position |
:py:data:`pygame_menu.locals.POSITION_SOUTHWEST` | South/West position |
:py:data:`pygame_menu.locals.POSITION_WEST` | West position |
Special positions used by Menu :py:class:`pygame_menu._scrollarea.ScrollArea` (all above are available):
Position | Description |
---|---|
:py:data:`pygame_menu.locals.SCROLLAREA_POSITION_BOTH_HORIZONTAL` | Scroll on both X axis |
:py:data:`pygame_menu.locals.SCROLLAREA_POSITION_BOTH_VERTICAL` | Scroll on both Y axis |
:py:data:`pygame_menu.locals.SCROLLAREA_POSITION_FULL` | Scroll on both X and Y axis |
A selection effect is a drawing class used to define the way to highlight the focused widget. An instance of the selection effect class is defined in the :py:attr:`Theme.widget_selection_effect` Theme property. See example on how to add a selection effect in :ref:`Create a selection effect` chapter.
The available selection effects are:
Class | Selection effect |
---|---|
:py:class:`pygame_menu.widgets.HighlightSelection` | Rectangular highlight |
:py:class:`pygame_menu.widgets.LeftArrowSelection` | Left arrow on the widget |
:py:class:`pygame_menu.widgets.NoneSelection` | No selection |
:py:class:`pygame_menu.widgets.RightArrowSelection` | Right arrow on the widget |
:py:class:`pygame_menu.widgets.SimpleSelection` | Only font color is changed |
The selection color is defined in :py:attr:`Theme.widget_selection_color`.
.. autoclass:: Theme :members: