The OLPC Wiki is Locked - Make a Donation to OLPC

GTK Graphics Sample Activity

Jump to: navigation, search
  english | 한국어 HowTo [ID# 50507]  +/-  

Here is an activity which demonstrates using GTK (specifically PyGTK) to do graphics in a Sugar Activity. The activity draws a green square inside of a black square using GTK drawing commands. When you press a key it quits.

# Minimal GTK Graphics Activity
# This demo shows how to set things up to do GTK graphics
# in the Sugar environment.

import pygtk
import gtk
import sys 

from sugar.activity import activity

class MinimalGtkGraphicsActivity(activity.Activity):
    """Minimal GTK Graphics activity.  
    Sets up the window for drawing and draws a rectangle inside
    another rectangle when the window is shown to the user.  Waits
    for a key press and then quits.


    def __init__(self, handle):
        activity.Activity.__init__(self, handle)

        # remove any children of the window that Sugar may have added
        for widget in self.get_children():

        self.set_title("Drawing Area Example")

        # Set up event handlers
        self.connect("destroy", lambda w: gtk.main_quit())
        self.connect("expose-event", self.area_expose_cb)
        self.connect("key_press_event", self.keypress_cb)
        # Set up the drawing area and graphics context
        self.area = self.window
        self.gc = self.area.new_gc()

        # Set up the colors to draw with
        self.colormap = self.gc.get_colormap()
        self.colors = {}
        self.colors['green'] = self.colormap.alloc_color('green')
        self.colors['black'] = self.colormap.alloc_color('black')

    def keypress_cb(self, widget, event):
        """Handle a key press"""

    def area_expose_cb(self, area, event):
        """Window exposed callback, includes drawing the boxes"""
        self.area.draw_rectangle(self.gc, True, 100, 100, 300, 300)
        self.gc.foreground = self.colors['green']
        self.area.draw_rectangle(self.gc, True, 200, 200, 100, 100) 

        return True