3b1b-manim/manim_docs/modules/event_handler.md
2025-04-06 00:05:12 +05:30

116 lines
No EOL
2.8 KiB
Markdown

# Event Handler Module README
## Overview
The event handler module manages user interactions and events in Manim. It provides a system for handling keyboard and mouse events, allowing for interactive animations and user input.
## Key Components
### 1. Event Dispatcher (`event_dispatcher.py`)
- **Purpose**: Central event management system
- **Key Features**:
- Registers and manages event listeners
- Dispatches events to appropriate handlers
- Handles event propagation
- **Usage**:
```python
dispatcher = EventDispatcher()
dispatcher.add_listener(event_type, handler)
```
### 2. Event Listener (`event_listner.py`)
- **Purpose**: Handles individual event subscriptions
- **Key Features**:
- Manages event callbacks
- Handles event priority
- Controls event propagation
- **Usage**:
```python
listener = EventListener(handler, priority=0)
```
### 3. Event Types (`event_type.py`)
- **Purpose**: Defines different types of events
- **Key Features**:
- Keyboard events
- Mouse events
- Custom event types
- **Usage**:
```python
class CustomEvent(EventType):
pass
```
## Event Types
### 1. Keyboard Events
- Key press events
- Key release events
- Special key combinations
### 2. Mouse Events
- Mouse movement
- Mouse clicks
- Mouse drag
- Mouse wheel
### 3. Custom Events
- Scene-specific events
- Animation events
- State change events
## Interaction with Other Modules
1. **Scene Module**:
- Scenes register event handlers
- Events can trigger scene changes
- Interactive scenes use event system
2. **Animation Module**:
- Events can control animations
- Animation state changes trigger events
- Interactive animations use event system
3. **Mobject Module**:
- Mobjects can respond to events
- Events can modify mobject properties
- Interactive mobjects use event system
## Best Practices
1. **Event Handling**:
- Keep handlers focused and simple
- Use appropriate event priorities
- Handle event propagation carefully
2. **Performance**:
- Minimize event handler complexity
- Use event filtering when possible
- Consider event frequency
3. **Code Organization**:
- Group related event handlers
- Use event types appropriately
- Document event dependencies
## Example Usage
```python
class InteractiveExample(Scene):
def construct(self):
# Create interactive mobject
circle = Circle()
self.add(circle)
# Define event handlers
def on_key_press(event):
if event.key == "LEFT":
circle.shift(LEFT)
elif event.key == "RIGHT":
circle.shift(RIGHT)
# Register event handler
self.add_key_press_handler(on_key_press)
# Interactive loop
self.wait()
```