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()