Creating themes¶
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(300, 400,
theme=pygame_menu.themes.THEME_BLUE,
title='Welcome')
Note
The theme parameters can be overwritten locally when adding a widget to the menu. See the overwritable ones in the add_… methods
Default themes¶
Several predefined themes are proposed by pygame-menu
.
Theme name | Example |
---|---|
pygame_menu.themes.THEME_DEFAULT |
|
pygame_menu.themes.THEME_BLUE |
|
pygame_menu.themes.THEME_DARK |
|
pygame_menu.themes.THEME_GREEN |
|
pygame_menu.themes.THEME_ORANGE |
|
pygame_menu.themes.THEME_SOLARIZED |
Create a theme¶
If none of the proposed theme fit to the needs, the Theme
give the opportunity to create custom themes.
mytheme = Theme(background_color=(0, 0, 0, 0), # transparent background
title_shadow=True,
title_background_color=(4, 47, 126),
...)
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)
Background Color/Images¶
Theme background can be both a color or an image. All colors can be defined using a tuple or an list of 3 or 4 numbers between 0 and 255. The format of numers 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 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 |
---|---|
pygame_menu.baseimage.IMAGE_MODE_CENTER |
Centers the image in the surface |
pygame_menu.baseimage.IMAGE_MODE_FILL |
Fill the image on the surface |
pygame_menu.baseimage.IMAGE_MODE_REPEAT_X |
Repeat the image on x axis |
pygame_menu.baseimage.IMAGE_MODE_REPEAT_XY |
Repeat the image on x and y axis |
pygame_menu.baseimage.IMAGE_MODE_REPEAT_Y |
Repeat the image on y axis |
pygame_menu.baseimage.IMAGE_MODE_SIMPLE |
Write the image on top-left location |
Currently, Theme
class only supports images for background_color
and
widget_background_color
. Also, only IMAGE_MODE_FILL drawing mode is valid for
widget_background_color
.
Widget selection effect¶
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 Theme.widget_selection_effect
parameter of a theme. See example on how to add a selection effect in Create a selection effect
chapter.
The available selection effects are:
Class | Selection effect |
---|---|
pygame_menu.widgets.HighlightSelection |
Rectangular highlight |
pygame_menu.widgets.LeftArrowSelection |
Left arrow on the widget |
pygame_menu.widgets.NoneSelection |
No selection |
pygame_menu.widgets.RightArrowSelection |
Right arrow on the widget |
The selection color is defined in Theme.widget_selection_color
.
Fonts¶
This library also has some fonts to use. To load a font, run this code:
import pygame_menu
font = pygame_menu.font.FONT_NAME
my_theme = Theme(widget_font=font, ...)
Available fonts | Preview |
---|---|
pygame_menu.font.FONT_8BIT |
|
pygame_menu.font.FONT_BEBAS |
|
pygame_menu.font.FONT_COMIC_NEUE |
|
pygame_menu.font.FONT_FRANCHISE |
|
pygame_menu.font.FONT_HELVETICA |
|
pygame_menu.font.FONT_MUNRO |
|
pygame_menu.font.FONT_NEVIS |
|
pygame_menu.font.FONT_OPEN_SANS |
|
pygame_menu.font.FONT_OPEN_SANS_BOLD |
|
pygame_menu.font.FONT_OPEN_SANS_ITALIC |
|
pygame_menu.font.FONT_OPEN_SANS_LIGHT |
|
pygame_menu.font.FONT_PT_SERIF |
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())
Theme API¶
Class defining the visual rendering of menus and widgets.
Note
All colors must be defined with a tuple of 3 or 4 numbers in the formats:
- (R,G,B)
- (R,G,B,A)
Red (R), Green (G) and Blue (B) must be numbers between 0 and 255. A means the alpha channel (opacity), if 0 the color is transparent, 100 means opaque.
Parameters: - background_color (tuple, list,
pygame_menu.baseimage.BaseImage
) – Menu background color - cursor_color (tuple, list) – Color of cursor
- cursor_selection_color (tuple, list) – Selection box color
- focus_background_color (tuple, list) – Color of the widget focus, this must be a tuple of 4 elements. And must be transparent
- menubar_close_button (bool) – Draw a back-box button on header to close the menu
- scrollbar_color (tuple, list) – Scrollbars color
- scrollbar_shadow (bool) – Indicate if a shadow is drawn on each scrollbar
- scrollbar_shadow_color (tuple, list) – Color of the shadow
- scrollbar_shadow_offset (int, float) – Offset of shadow
- scrollbar_shadow_position (str) – Position of shadow
- scrollbar_slider_color (tuple, list) – Color of the sliders
- scrollbar_slider_pad (int, float) – Space between slider and scrollbars borders
- scrollbar_thick (int, float) – Scrollbars thickness
- selection_color (tuple, list) – Color of the selector widget
- surface_clear_color (tuple, list) – Surface clear color before applying background function
- title_background_color (tuple, list) – Title background color
- title_bar_style (int) – Style of the title, use menubar widget styles
- title_font (str, None) – Optional title font, if None use the Menu default font
- title_font_antialias (bool) – Title font renders with antialiasing
- title_font_color (tuple, list, None) – Title font color, if None use the widget font color
- title_font_size (int) – Font size of the title
- title_offset (tuple, list) – Offset (x-position,y-position) of title (px). Default (0,0)
- title_shadow (bool) – Enable shadow on title
- title_shadow_color (tuple, list) – Title shadow color
- title_shadow_offset (int, float) – Offset of shadow on title
- title_shadow_position (str) – Position of the shadow on title
- widget_alignment (str) – Widget default alignment
- widget_background_color (tuple, list,
pygame_menu.baseimage.BaseImage
, None) – Background color of a widget - widget_font (str) – Widget font path or name
- widget_font_antialias (bool) – Widget font renders with antialiasing
- widget_font_background_color_from_menu (bool) – Use menu background color as font background color, True by default in pygame v2
- widget_font_color (tuple, list) – Color of the font
- widget_font_size (int) – Font size
- widget_margin (tuple, list) – Horizontal and vertical margin of each element in Menu (px). Default (0, 10)
- widget_offset (tuple, list) – X,Y axis offset of widgets inside Menu (px). If value less than 1 use percentage of width/height. Default (0, 0)
- widget_selection_effect (
pygame_menu.widgets.core.Selection
) – Widget selection effect object - widget_shadow (bool) – Indicate if a shadow is drawn on each widget
- widget_shadow_color (tuple, list) – Color of the shadow
- widget_shadow_offset (int, float) – Offset of shadow
- widget_shadow_position (str) – Position of shadow
Creates a deep copy of the object.
Returns: Copied theme Return type: Theme
Modify menu background color with given opacity.
Parameters: opacity (int) – Opacity value, from 0 (transparent) to 1 (transparent) Returns: None
Validate the values of the theme. If there’s a invalid parameter throws an AssertionError.
This function also converts all lists to tuples. This is done because lists are mutable.
Returns: None