Process keypresses in Clutter

# [SNIPPET_NAME: Process keypresses in Clutter]
# [SNIPPET_CATEGORIES: Clutter]
# [SNIPPET_DESCRIPTION: Set up a stage callback for clutter to process key-press events]
# [SNIPPET_AUTHOR: Nick Veitch <[email protected]>]
# [SNIPPET_LICENSE: GPL]

import clutter


# define some colours (takes RGBA values)
red=clutter.Color(255,0,0,255)
green=clutter.Color(0,255,0,255)
blue=clutter.Color(0,0,255,255)
black=clutter.Color(0,0,0,255)
white=clutter.Color(255,255,255,255)

#create the clutter stage and set it up
stage = clutter.Stage()
stage.set_size(250, 180)
stage.set_color(black)

#Create a text actor for feedback
text_actor=clutter.Text()
text_actor.set_color(red)
text_actor.set_position(20,70)
text_actor.set_font_name('Sans 24')
text_actor.set_text('Press a Key')
# add this actor to the stage
stage.add(text_actor)

# define a callback method for key presses
def keyPress(self, event):
    # Parses the keyboard input generated by a callback from the Stage object
    # The event object has the property 'keyval'
    # clutter also defines constants for keyvals
    # so we can use these to compare
    if event.keyval == clutter.keysyms.q:
        #if the user pressed "q" quit the test
        clutter.main_quit()
    elif event.keyval == clutter.keysyms.r:
        #if the user pressed "r" make the actor red
        text_actor.set_color(red)
        text_actor.set_text("This is Red")
    elif event.keyval == clutter.keysyms.g:
        #if the user pressed "g" make the actor green
        text_actor.set_color(green)
        text_actor.set_text("This is Green")
    elif event.keyval == clutter.keysyms.b:
        #if the user pressed "b" make the actor blue
        text_actor.set_color(blue)
        text_actor.set_text("This is Blue")
    elif event.keyval == clutter.keysyms.Up:
        # 'Up' is equal to the cursor up key
        stage.set_color(black)
    elif event.keyval == clutter.keysyms.Down:
        # 'Down' is equal to the cursor down key
        stage.set_color(white)
    #event feedback, useful for working out values of tricky keys
    print 'event processed',  event.keyval


#show the stage
stage.show_all()
#connect signals
stage.connect("destroy",clutter.main_quit)
stage.connect('key-press-event', keyPress)
#pass execution to the main clutter loop
clutter.main()