# Handling mouse and keyboard events

So far the only event used is the on_draw event. To react to keyboard and mouse events, it's necessary to write and attach event handlers for these events as well:

    import pyglet

    window = pyglet.window.Window()

    @window.event
    def on_key_press(symbol, modifiers):
        print 'A key was pressed'

    @window.event
    def on_draw():
        window.clear()

    pyglet.app.run()

Keyboard events have two parameters: the virtual key symbol that was pressed, and a bitwise combination of any modifiers that are present (for example, the `CTRL` and `SHIFT` keys).

The key symbols are defined in pyglet.window.key:

    from pyglet.window import key

    @window.event
    def on_key_press(symbol, modifiers):
        if symbol == key.A:
            print 'The "A" key was pressed.'
        elif symbol == key.LEFT:
            print 'The left arrow key was pressed.'
        elif symbol == key.ENTER:
            print 'The enter key was pressed.'

See the pyglet.window.key documentation for a complete list of key symbols.

Mouse events are handled in a similar way:

    from pyglet.window import mouse

    @window.event
    def on_mouse_press(x, y, button, modifiers):
        if button == mouse.LEFT:
            print 'The left mouse button was pressed.'

The `x` and `y` parameters give the position of the mouse when the button was pressed, relative to the lower-left corner of the window.

There are more than 20 event types that you can handle on a window. The easiest way to find the event name and parameters you need is to add the following line to your program:

    window.push_handlers(pyglet.window.event.WindowEventLogger())

This will cause all events received on the window to be printed to the console.

An example program using keyboard and mouse events is in examples/programming_guide/events.py