Development Team/Sugargame

From Sugar Labs
Jump to navigation Jump to search


Sugargame is a Python package which allows Pygame programs to run well under Sugar. It is fork of the olcpgames framework, which is no longer maintained.

What it does:

  • Wraps a Sugar activity around an existing Pygame program with few changes
  • Allows Sugar toolbars and other widgets to be added to the activity UI
  • Provides hooks for saving to and restoring from the Journal

Differences between Sugargame and olpcgames

The olpcgames framework provides a wrapper around Pygame which attempts to allow a Pygame program to run mostly unmodified under Sugar. To this end, the Pygame program is run in a separate thread with its own Pygame message loop while the main thread runs the GTK message loop. Also, olpcgames wraps Sugar APIs such as the journal and mesh into a Pygame-like API.

Sugargame takes a simpler approach; it provides a way to embed Pygame into a GTK widget. The Sugar APIs are used to interact with Sugar, the Pygame APIs are used for the game.

Sugargame advantages:

  • Simpler code
  • More elegant interface between Pygame and GTK
  • Runs as a single thread: no thread related segfaults
  • Possible to use Sugar widgets with Pygame

Sugargame limitations:

  • No support for Pango or SVG sprites (yet)

Using Sugargame

See also Development Team/Sugargame/Examples.

Wrapping a Pygame program

To use Sugargame to Sugarize a Pygame program, set up an activity directory and copy the Sugargame package to it.

The activity directory should look something like this:

  activity/            - Activity directory:, SVG icon, etc.
  sugargame/           - Sugargame package        - Activity class            - Pygame code             - Install script

To make the Activity class, start with test/ from the Sugargame distribution.

The activity should create a single PygameCanvas widget and call run_pygame on it. Pass the main loop function of the Pygame program.

self._canvas = sugargame.canvas.PygameCanvas(self)
# Start the game running.

In your Pygame main loop, pump the GTK message loop:

  while gtk.events_pending():

Adding Pygame to a PyGTK activity

To add Pygame to an existing Sugar activity, create a PygameCanvas widget and call run_pygame on it.

widget = sugargame.canvas.PygameCanvas(self)


Due to limitations of Pygame and SDL, there can only be one PygameCanvas in the entire activity.

The argument to run_pygame is a function structured like a Pygame program. In the main loop, remember to dispatch GTK messages using gtk.main_iteration().

def main_loop():
       clock = pygame.time.Clock()
       screen = pygame.display.get_surface()

       while self.running:
           # Pump GTK messages.
           while gtk.events_pending():

           # Pump PyGame messages.
           for event in pygame.event.get():
               if event.type == pygame.QUIT:
               elif event.type == pygame.VIDEORESIZE:
                   pygame.display.set_mode(event.size, pygame.RESIZABLE)

           # Clear Display
           screen.fill((255,255,255)) #255 for white

           # Draw stuff here

           # Flip Display
           # Try to stay at 30 FPS


For help with Sugargame, please email the Sugar Labs development list:

Sugargame is developed by Wade Brainerd <>.

It is loosely based on the source code to the olpcgames framework, developed by the One Laptop Per Child project.



Initial version of Sugargame