Cross-platform windowing and multimedia library for Python with OpenGL graphics, event handling, and audio/video playback
npx @tessl/cli install tessl/pypi-pyglet@2.1.0Cross-platform windowing and multimedia library for Python with OpenGL graphics, event handling, and audio/video playback.
Installation: pip install pyglet
Requirements: Python 3.8+, OpenGL 3.3+
License: BSD
import pyglet
window = pyglet.window.Window(800, 600)
@window.event
def on_draw():
window.clear()
pyglet.app.run()Use this guide to quickly find the right module for your task:
Window & Display:
2D Graphics:
Text:
Images & Textures:
Audio & Video:
Timing & Scheduling:
Math:
Input Devices:
GUI:
Resource Management:
3D:
import pyglet
from pyglet.window import key
# Setup
window = pyglet.window.Window(800, 600)
batch = pyglet.graphics.Batch()
# Load resources
player_img = pyglet.image.load('player.png')
player = pyglet.sprite.Sprite(player_img, x=400, y=300, batch=batch)
# Input
keys = key.KeyStateHandler()
window.push_handlers(keys)
# Update
def update(dt):
speed = 200 * dt
if keys[key.LEFT]: player.x -= speed
if keys[key.RIGHT]: player.x += speed
pyglet.clock.schedule_interval(update, 1/60)
# Render
@window.event
def on_draw():
window.clear()
batch.draw()
pyglet.app.run()import pyglet
# Set asset paths
pyglet.resource.path = ['assets/images', 'assets/sounds']
pyglet.resource.reindex()
# Load and cache automatically
player_img = pyglet.resource.image('player.png')
jump_sound = pyglet.resource.media('jump.wav', streaming=False)# Always use batching for multiple objects
batch = pyglet.graphics.Batch()
# Use groups for layering
background = pyglet.graphics.Group(order=0)
foreground = pyglet.graphics.Group(order=1)
# Add objects to batch
bg_sprite = pyglet.sprite.Sprite(bg_img, batch=batch, group=background)
player = pyglet.sprite.Sprite(player_img, batch=batch, group=foreground)
# Draw everything at once
@window.event
def on_draw():
window.clear()
batch.draw() # Single call renders allAudio file size:
├─ < 1 MB (SFX) → streaming=False
└─ > 1 MB (music) → streaming=TrueInput type:
├─ Continuous (movement) → KeyStateHandler + schedule
├─ Discrete (jump, shoot) → @window.event on_key_press
└─ Game controller → pyglet.input.get_controllers()Update type:
├─ Every frame (smooth animation) → schedule(func)
├─ Fixed rate (physics, game logic) → schedule_interval(func, 1/60)
└─ Occasional (spawn, autosave) → schedule_interval(func, delay)Window(vsync=True)import pyglet
class Game:
def __init__(self):
self.window = pyglet.window.Window(800, 600, vsync=True)
self.batch = pyglet.graphics.Batch()
self.keys = pyglet.window.key.KeyStateHandler()
self.window.push_handlers(self.keys)
# Setup
self.load_resources()
self.setup_entities()
# Events
self.window.event(self.on_draw)
pyglet.clock.schedule_interval(self.update, 1/60)
def load_resources(self):
pyglet.resource.path = ['assets']
pyglet.resource.reindex()
# Load images, sounds, etc
def setup_entities(self):
# Create sprites, shapes, etc
pass
def update(self, dt):
# Game logic
pass
def on_draw(self):
self.window.clear()
self.batch.draw()
def run(self):
pyglet.app.run()
if __name__ == '__main__':
Game().run()| Module | Purpose | Link |
|---|---|---|
pyglet.app | Event loop, application lifecycle | app-clock.md |
pyglet.window | Window creation, input events | windowing.md |
pyglet.sprite | 2D sprite rendering | sprites-shapes.md |
pyglet.shapes | Geometric primitives | sprites-shapes.md |
pyglet.image | Image loading, textures | images-textures.md |
pyglet.text | Text rendering, fonts | text-rendering.md |
pyglet.media | Audio/video playback | audio-video.md |
pyglet.graphics | Low-level rendering, shaders | graphics-rendering.md |
pyglet.math | Vector/matrix math | math.md |
pyglet.input | Game controllers, joysticks | input-devices.md |
pyglet.gui | UI widgets | gui.md |
pyglet.resource | Resource management | resource-management.md |
pyglet.model | 3D model loading | 3d-models.md |
pyglet.gl | OpenGL bindings | opengl.md |
import pyglet
print(pyglet.version) # '2.1.9'Note for AI Agents: This index is designed for quick navigation. For detailed API references, class signatures, and comprehensive examples, see the module-specific documentation files linked above.