simpleguics2pygame — frame

simpleguics2pygame module: simpleguics2pygame/frame.

Class Frame.

Piece of SimpleGUICS2Pygame. https://bitbucket.org/OPiMedia/simpleguics2pygame

license

GPLv3 — Copyright (C) 2015-2016, 2020-2021 Olivier Pirson

author

Olivier Pirson — http://www.opimedia.be/

version

May 4, 2021

class SimpleGUICS2Pygame.simpleguics2pygame.frame.Frame(title: str, canvas_width: Union[int, float], canvas_height: Union[int, float], control_width: Union[int, float] = 200)[source]

Frame similar to SimpleGUI Frame of CodeSkulptor.

__deal_event_joypad(event: pygame.event.Event) bool

Private function that dispatch joypad event.

(Not available in SimpleGUI of CodeSkulptor.)

Parameters

event – Pygame event

Returns

True if some event match, else False

__deal_event_key(event: pygame.event.Event) bool

Private function that dispatch key event.

Parameters

event – Pygame event

Returns

True if some event match, else False

__deal_event_mouse(event: pygame.event.Event) bool

Private function that dispatch mouse event.

Parameters

event – Pygame event

Returns

True if some event match, else False

__init__(title: str, canvas_width: Union[int, float], canvas_height: Union[int, float], control_width: Union[int, float] = 200) None[source]

Set the frame.

Don’t use directly, use create_frame().

Parameters
  • title – str

  • canvas_width – (int or float) >= 0

  • canvas_height – (int or float) >= 0

  • control_width – (int or float) >= 0

__repr__() str[source]

Return ‘<Frame object>’.

Returns

str

__weakref__

list of weak references to the object (if defined)

_background_pygame_color = '#ffffff'

Default background color of frame.

_canvas_border_pygame_color = '#000000'

Border color of canvas.

_controlpanel_background_pygame_color = '#ffffff'

Background color of control panel.

_cursor_auto_hide = False

When move cursor, if True then hide cursor when on canvas, else show cursor.

_cursor_in_canvas() bool[source]
Returns

True if the cursor is on canvas, False else.

_display_fps_average = False

If True then display FPS average on the canvas.

_draw_controlpanel() None[source]

Draw the control panel and two status boxes.

(Not available in SimpleGUI of CodeSkulptor.)

_draw_statuskey(key: int = 0, pressed: Optional[bool] = None) None[source]

Draw the status box of key.

(Not available in SimpleGUI of CodeSkulptor.)

Parameters
  • key – int

  • pressed – None or bool

_draw_statusmouse(position: Sequence[Union[int, float]] = (0, 0), pressed: Optional[bool] = None) None[source]

Draw the status box of mouse.

(Not available in SimpleGUI of CodeSkulptor.)

Parameters
  • position – (int or float, int or float) or [int or float, int or float]

  • pressed – bool

_fps = 60

Frames per second drawed (frequency of draw and check events)

_frame_instance = None

The only instance of Frame.

_frame_padding = 2

The padding in pixels around the canvas

_get_fps_average() float[source]

Return the framerate average (in frame per second) computed by Pygame.

(Not available in SimpleGUI of CodeSkulptor.)

Returns

float

_hide_controlpanel = False

If True then hide control panel (and status box).

_hide_status = False

If True then hide status box.

_keep_timers = None

If None then ask (when stop frame) if it should be stop timers when program ending. (This is the default behavior.)

If True then timers keep running when program ending.

If False then stop all timers when program ending.

_pos_in_control(x: Union[int, float], y: Union[int, float]) Optional[Union[SimpleGUICS2Pygame.simpleguics2pygame.control.Control, SimpleGUICS2Pygame.simpleguics2pygame.control.TextAreaControl]][source]

If position (x, y) is on the zone of one Control or TextAreaControl then return it else return None.

(Not available in SimpleGUI of CodeSkulptor.)

Parameters
  • x – int or float

  • y – int or float

Returns

None or Control or TextAreaControl

_print_stats_cache = False

If True then print some statistics of caches after frame stopped.

_pygame_mode_depth = 0

Default number of bits used to represent color.

See https://www.pygame.org/docs/ref/display.html#pygame.display.set_mode

_pygame_mode_flags = 0

Default options of graphic mode.

See https://www.pygame.org/docs/ref/display.html#pygame.display.set_mode

classmethod _pygamecolors_cached_clear() None[source]

Empty the cache of Pygame colors used.

Each color used is cached to accelerate drawing. If you use many many different colors maybe use this function to free memory.

(Not available in SimpleGUI of CodeSkulptor.)

Side effect: Empty _colors._PYGAMECOLORS_CACHED.

classmethod _pygamefonts_cached_clear() None[source]

Empty the cache of Pygame fonts used.

Each font used with each size is cached to accelerate drawing. If you use many many different sizes maybe use this function to free memory.

(Not available in SimpleGUI of CodeSkulptor.)

Side effect: Empty _fonts.__PYGAMEFONTS_CACHED.

_save_canvas_and_stop(filename: str, after: Union[int, float] = 1000) None[source]

Wait after ms (first wait until the frame is started), then save the canvas in a file and stop the program.

(Not available in SimpleGUI of CodeSkulptor.)

Parameters
  • filename – str

  • after – int or float >= 0

_save_canvas_request(filename: str) None[source]

Request to save the canvas image in a file.

(The images are saved on each cycle fixed by Frame._fps.)

(Not available in SimpleGUI of CodeSkulptor.)

Parameters

filename – str

_save_canvas_requests: List[str] = []

List of filenames in which to save canvas image.

_set_canvas_background_image(image: Optional[SimpleGUICS2Pygame.simpleguics2pygame.image.Image]) None[source]

Set an image to replace the background color of the canvas.

Parameters

image – None or Image

classmethod _set_cursor_visible(visible: bool = True) None[source]

If visible is True then show cursor, else hide cursor.

Independently of _cursor_auto_hide value.

Parameters

visible – bool

_set_joypadaxe_handler(joypad_handler: Callable[[int, int, float], Any]) None[source]

Set the function handler that will be executed (with the joypad index, the axe index and the value) when axis of joypad move.

(The events are checked on each cycle fixed by Frame._fps.)

(Not available in SimpleGUI of CodeSkulptor.)

Parameters

joypad_handler – function (int >= 0, int >=0, -1 <= float <= 1) -> *

_set_joypaddown_handler(joypad_handler: Callable[[int, int], Any]) None[source]

Set the function handler that will be executed (with the joypad index and the button index) when a button of joypad is pressed.

(The events are checked on each cycle fixed by Frame._fps.)

(Not available in SimpleGUI of CodeSkulptor.)

Parameters

joypad_handler – function (int >= 0, int >= 0) -> *

_set_joypadhat_handler(joypad_handler: Callable[[int, int, Tuple[int, int]], Any]) None[source]

Set the function handler that will be executed (with the joypad index, the hat index and the values (a, b) where a and b == -1, 0 or 1) when hat of joypad move.

(The events are checked on each cycle fixed by Frame._fps.)

(Not available in SimpleGUI of CodeSkulptor.)

Parameters

joypad_handler – function (int >= 0, int >= 0, (int, int)) -> *

_set_joypadup_handler(joypad_handler: Callable[[int, int], Any]) None[source]

Set the function handler that will be executed (with the joypad index and the button index) when a button of joypad is released.

(The events are checked on each cycle fixed by Frame._fps.)

(Not available in SimpleGUI of CodeSkulptor.)

Parameters

joypad_handler – function (int >= 0, int >= 0) -> *

_statuskey_background_pygame_color = '#ffffff'

pygame.Color of background in status key box.

_statuskey_height = 20

Height of the status key box.

_statuskey_pygame_color = '#000000'

pygame.Color of status key box (text and rectangle).

_statuskey_pygame_font = None

pygame.font.Font of status key box.

_statusmouse_background_pygame_color = '#ffffff'

pygame.Color of background in status mouse box.

_statusmouse_height = 20

Height of the status mouse box.

_statusmouse_pygame_color = '#000000'

pygame.Color of status mouse box (text and rectangle).

_statusmouse_pygame_font = None

pygame.font.Font of status mouse box.

add_button(text: str, button_handler: Callable[[], Any], width: Optional[int] = None) SimpleGUICS2Pygame.simpleguics2pygame.control.Control[source]

Add a button in the control panel.

When the button are pressed and released, button_handler are executed.

If width is not None then text is possibly cutted.

But, in CodeSkulptor, the accurate appearance is browser dependent. And in SimpleGUICS2Pygame, the accurate appearance is font dependent.

Parameters
  • text – str

  • button_handler – function () -> *

  • width – None or int

Returns

Control

add_input(text: str, input_handler: Callable[[str], Any], width: int) SimpleGUICS2Pygame.simpleguics2pygame.control.TextAreaControl[source]

Add a “label” with an input box in the control panel.

When click with left button of mouse on the “label” or input box, the focus is give to this input box.

When press Tab, the focus is give to the next input box (if exist).

When press Enter, this input box lost the focus and input_handler are executed with the input text.

Parameters
  • text – str

  • input_handler – function (str) -> *

  • width – int

Returns

Control

add_label(text: str, width: Optional[int] = None) SimpleGUICS2Pygame.simpleguics2pygame.control.Control[source]

Add a label in the control panel.

If width is not None then text is possibly cutted.

But, in CodeSkulptor, the accurate appearance is browser dependent. And in SimpleGUICS2Pygame, the accurate appearance is font dependent.

Parameters
  • text – str

  • width – None or int

Returns

Control

download_canvas_image(filename: str = 'canvas.png') None[source]

Save the content of the canvas in a local file.

In SimpleGUICS2Pygame supported formats are supported formats by Pygame to save: TGA, PNG, JPEG or BMP (see https://www.pygame.org/docs/ref/image.html#pygame.image.save ).

If filename extension is not recognized then TGA format is used.

If filename == ‘’ then a random filename is used, beginning by ‘canvas_’ and with ‘.png’ extension.

In CodeSkulptor the format is always PNG.

(Available in SimpleGUI of CodeSkulptor3 but not in CodeSkulptor2 and not in CodeSkulptor documentation!)

Parameters

filename – str

get_canvas_image() None[source]

NOT YET IMPLEMENTED! (Does nothing.)

(Available in SimpleGUI of CodeSkulptor but not in CodeSkulptor documentation!)

get_canvas_textwidth(text: str, font_size: Union[int, float], font_face: str = 'serif') Union[int, float][source]

Return the width needed to draw text by Frame.draw_text().

Parameters
  • text – str

  • font_size – (int or float) >= 0

  • font_face – str == ‘monospace’, ‘sans-serif’, ‘serif’

Returns

int or float >= 0

set_canvas_background(color: str) None[source]

Set the background color of the canvas.

Parameters

color – str

set_draw_handler(draw_handler: Callable[[SimpleGUICS2Pygame.simpleguics2pygame.canvas.Canvas], Any]) None[source]

Set the function handler that will be executed each cycle fixed by Frame._fps.

Parameters

draw_handler – function (Canvas) -> *

set_keydown_handler(key_handler: Callable[[int], Any]) None[source]

Set the function handler that will be executed (with the key code) when a key is released.

(The events are checked on each cycle fixed by Frame._fps.)

Parameters

key_handler – function (int >= 0) -> *

set_keyup_handler(key_handler: Callable[[int], Any]) None[source]

Set the function handler that will be executed (with the key code) when a key is pressed.

(The events are checked on each cycle fixed by Frame._fps.)

Parameters

key_handler – function (int >= 0) -> *

set_mouseclick_handler(mouse_handler: Callable[[Tuple[int, int]], Any]) None[source]

Set the function handler that will be executed (with the position of the mouse) when the left button of mouse is released.

(The events are checked on each cycle fixed by Frame._fps.)

Parameters

mouse_handler – function ((int >= 0, int >= 0)) -> *

set_mousedrag_handler(mouse_handler: Callable[[Tuple[int, int]], Any]) None[source]

Set the function handler that will be executed (with the position of the mouse) for each new mouse position when the left button of mouse is pressed.

(The events are checked on each cycle fixed by Frame._fps.)

Parameters

mouse_handler – function ((int >= 0, int >= 0)) -> *

start() None[source]

Start the frame and these handler events.

Warning

With SimpleGUICS2Pygame, Frame.start() is blocking until Frame.stop() execution or closing window. So timers must be started before, and states must be initialized before. (Or maybe after by a handler function.)

(In SimpleGUI of CodeSkulptor this function is not blocking.)

stop() None[source]

Stop frame activities.

If (Frame._keep_timers is None) and there is still running timers then ask in the canvas if it should be stop timers when program ending.

(Maybe available in SimpleGUI of CodeSkulptor but not in CodeSkulptor documentation!)

SimpleGUICS2Pygame.simpleguics2pygame.frame.create_frame(title: str, canvas_width: Union[int, float], canvas_height: Union[int, float], control_width: Union[int, float] = 200) SimpleGUICS2Pygame.simpleguics2pygame.frame.Frame[source]

Create and return an interactive window.

| +-------+
| | title |
| +---------+--------------+
| | control |              |
| | panel   |    canvas    |
| |         |              |
| +---------+--------------+
title: title of the window.
canvas_width, canvas_height: dimensions of the canvas.
control_width: width of the control panel.

(The frame is inactive until the execution of Frame.start().)

Don’t run twice!

Parameters
  • title – str

  • canvas_width – (int or float) >= 0

  • canvas_height – (int or float) >= 0

  • control_width – (int or float) >= 0

Returns

Frame

SimpleGUICS2Pygame.simpleguics2pygame.frame.__all__ = ('Frame', 'create_frame')

Built-in immutable sequence.

If no argument is given, the constructor returns an empty tuple. If iterable is specified the tuple is initialized from iterable’s items.

If the argument is a tuple, the return value is the same object.

[source]