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 <evilnick@evilnick.org>] # [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()