pygame module for interacting with events and queues

Pygame handles all its event messaging through an event queue. The routines in this module help you manage that event queue. The input queue is heavily dependent on the pygame display module. If the display has not been initialized and a video mode not set, the event queue will not really work.

The queue is a regular queue of pygame.event.EventType event objects, there are a variety of ways to access the events it contains. From simply checking for the existence of events, to grabbing them directly off the stack.

All events have a type identifier. This event type is in between the values of NOEVENT and NUMEVENTS. All user defined events can have the value of USEREVENT or higher. It is recommended make sure your event id's follow this system.

To get the state of various input devices, you can forego the event queue and access the input devices directly with their appropriate modules; mouse, key, and joystick. If you use this method, remember that pygame requires some form of communication with the system window manager and other parts of the platform. To keep pygame in synch with the system, you will need to call pygame.event.pump() to keep everything current. You'll want to call this function usually once per game loop.

The event queue offers some simple filtering. This can help performance slightly by blocking certain event types from the queue, use the pygame.event.set_allowed() and pygame.event.set_blocked() to work with this filtering. All events default to allowed.

The event subsystem should be called from the main thread. If you want to post events into the queue from other threads, please use the fastevent package.

Joysticks will not send any events until the device has been initialized.

An EventType event object contains an event type identifier and a set of member data. The event object contains no method functions, just member data. EventType objects are retrieved from the pygame event queue. You can create your own new events with the pygame.event.Event() function.

The SDL event queue has an upper limit on the number of events it can hold (128 for standard SDL 1.2). When the queue becomes full new events are quietly dropped. To prevent lost events, especially input events which signal a quit command, your program must regularly check for events and process them. To speed up queue processing use pygame.event.set_blocked() to limit which events get queued.

All EventType instances have an event type identifier, accessible as the EventType.type property. You may also get full access to the event object's attributes through the EventType.__dict__ attribute. All other member lookups will be passed through to the object's dictionary values.

While debugging and experimenting, you can print an event object for a quick display of its type and members. Events that come from the system will have a guaranteed set of member items based on the type. Here is a list of the event attributes defined with each event type.

QUIT             none
ACTIVEEVENT      gain, state
KEYDOWN          unicode, key, mod
KEYUP            key, mod
MOUSEMOTION      pos, rel, buttons
MOUSEBUTTONUP    pos, button
JOYAXISMOTION    joy, axis, value
JOYBALLMOTION    joy, ball, rel
JOYHATMOTION     joy, hat, value
JOYBUTTONUP      joy, button
JOYBUTTONDOWN    joy, button
VIDEORESIZE      size, w, h
USEREVENT        code

Events support equality comparison. Two events are equal if they are the same type and have identical attribute values. Inequality checks also work.

New in version 1.9.2: On MacOSX, USEREVENT can have code = pygame.USEREVENT_DROPFILE. That means the user is trying to open a file with your application. The filename can be found at event.filename

pygame.event.pump() -> None

internally process pygame event handlers

For each frame of your game, you will need to make some sort of call to the event queue. This ensures your program can internally interact with the rest of the operating system. If you are not using other event functions in your game, you should call pygame.event.pump() to allow pygame to handle internal actions.

This function is not necessary if your program is consistently processing events on the queue through the other pygame.event functions.

There are important things that must be dealt with internally in the event queue. The main window may need to be repainted or respond to the system. If you fail to make a call to the event queue for too long, the system may decide your program has locked up.

pygame.event.get() -> Eventlist
pygame.event.get(type) -> Eventlist
pygame.event.get(typelist) -> Eventlist

get events from the queue

This will get all the messages and remove them from the queue. If a type or sequence of types is given only those messages will be removed from the queue.

If you are only taking specific events from the queue, be aware that the queue could eventually fill up with the events you are not interested.

pygame.event.poll() -> EventType instance

get a single event from the queue

Returns a single event from the queue. If the event queue is empty an event of type pygame.NOEVENT will be returned immediately. The returned event is removed from the queue.

pygame.event.wait() -> EventType instance

wait for a single event from the queue

Returns a single event from the queue. If the queue is empty this function will wait until one is created. The event is removed from the queue once it has been returned. While the program is waiting it will sleep in an idle state. This is important for programs that want to share the system with other applications.

pygame.event.peek(type) -> bool
pygame.event.peek(typelist) -> bool

test if event types are waiting on the queue

Returns true if there are any events of the given type waiting on the queue. If a sequence of event types is passed, this will return True if any of those events are on the queue.

pygame.event.clear() -> None
pygame.event.clear(type) -> None
pygame.event.clear(typelist) -> None

remove all events from the queue

Remove all events or events of a specific type from the queue. This has the same effect as pygame.event.get() except nothing is returned. This can be slightly more efficient when clearing a full event queue.

pygame.event.event_name(type) -> string

get the string name from and event id

Pygame uses integer ids to represent the event types. If you want to report these types to the user they should be converted to strings. This will return a the simple name for an event type. The string is in the WordCap style.

pygame.event.set_blocked(type) -> None
pygame.event.set_blocked(typelist) -> None
pygame.event.set_blocked(None) -> None

control which events are allowed on the queue

The given event types are not allowed to appear on the event queue. By default all events can be placed on the queue. It is safe to disable an event type multiple times.

If None is passed as the argument, this has the opposite effect and ALL of the event types are allowed to be placed on the queue.

pygame.event.set_allowed(type) -> None
pygame.event.set_allowed(typelist) -> None
pygame.event.set_allowed(None) -> None

control which events are allowed on the queue

The given event types are allowed to appear on the event queue. By default all events can be placed on the queue. It is safe to enable an event type multiple times.

If None is passed as the argument, NONE of the event types are allowed to be placed on the queue.

pygame.event.get_blocked(type) -> bool

test if a type of event is blocked from the queue

Returns true if the given event type is blocked from the queue.

pygame.event.set_grab(bool) -> None

control the sharing of input devices with other applications

When your program runs in a windowed environment, it will share the mouse and keyboard devices with other applications that have focus. If your program sets the event grab to True, it will lock all input into your program.

It is best to not always grab the input, since it prevents the user from doing other things on their system.

pygame.event.get_grab() -> bool

test if the program is sharing input devices

Returns true when the input events are grabbed for this application. Use pygame.event.set_grab() to control this state.

pygame.event.post(Event) -> None

place a new event on the queue

This places a new event at the end of the event queue. These Events will later be retrieved from the other queue functions.

This is usually used for placing pygame.USEREVENT events on the queue. Although any type of event can be placed, if using the system event types your program should be sure to create the standard attributes with appropriate values.

If the SDL event queue is full a pygame.error is raised.

pygame.event.Event(type, dict) -> EventType instance
pygame.event.Event(type, **attributes) -> EventType instance

create a new event object

Creates a new event with the given type. The event is created with the given attributes and values. The attributes can come from a dictionary argument with string keys, or from keyword arguments.


pygame object for representing SDL events

A Python object that represents an SDL event. User event instances are created with an Event function call. The EventType type is not directly callable. EventType instances support attribute assignment and deletion.

type -> int

SDL event type identifier.

Read only. Predefined event identifiers are QUIT and MOUSEMOTION, for example. For user created event objects, this is the type argument passed to pygame.event.Event().

__dict__ -> dict

Event object attribute dictionary

Read only. The event type specific attributes of an event. As an example, this would contain the unicode, key, and mod attributes of a KEYDOWN event. The dict attribute is a synonym, for backward compatibility.

Mutable attributes are new to pygame 1.9.2.

© Pygame Developpers.
Licensed under the GNU LGPL License version 2.1.