A fully interactive League of Legends drafting simulator written in Python with Tkinter.
Players share a randomly assigned champion, then take turns performing BAN and PICK actions on items following a configurable draft sequence.
The UI is responsive, supports search + tag filtering, and displays item and champion icons directly from the /assets directory.
- Follows the official draft order:
- BAN → BAN → ... → PICK → PICK → … (customizable in
core/draft_steps.py)
- BAN → BAN → ... → PICK → PICK → … (customizable in
- Tracks:
- Blue picks & bans
- Red picks & bans
- Disabled (already selected) items
- On each draft start, a champion is chosen randomly.
- Both sides play the same champion.
- Large champion icon & name displayed at top center.
- Fully responsive grid using
Canvas - Columns dynamically change based on window width
- Smooth resizing (debounced)
- Search bar + tag filters
- Item card includes:
- Icon
- Name
- Cost
- Tags
- Pick/Ban button
- Fast loading via cache
- Icons stored locally:
assets/
champion/
item/
- Automatic detection of missing images
- Colored logs for Blue and Red team actions
- Scrollable text widget
- Log preserved until reset
- Export draft results to JSON
- Load a custom items JSON file at runtime
The project is cleanly split into structured directories:
src/
├── core/
│ ├── model.py
│ ├── loader.py
│ └── draft_steps.py
├── ui/
│ ├── app.py
│ ├── icons.py
│ ├── sidebar.py
│ ├── grid.py
│ ├── champion.py
│ └── logbox.py
└── main.py
assets/
├── item/
├── champion/
├── items.json
└── champions.json