qt-animation-timeline
A blender-style timeline widget for qt to edit animations.
Controls
| Action | Mouse/Key binding | Region |
|---|---|---|
| New Keyframe | Double click | Track |
| Select Keyframe | Click | Keyframe |
| Select multiple | Ctrl + Click | Keyframe |
| Select with box | Shift + Click | Tracks |
| Delete selected | Del | - |
| Move Selected Keyframes | Drag | Keyframe |
| Move whole track | Drag | Track Line |
| Change easing function | Right Click | Track Line or Keyframe |
| Scrub playhead | Drag | Header |
| Select play range | Shift + Drag | Header |
| Play/Pause animation | Space | - |
Usage
The widget takes a mapping of track names to python objects and attribute names, allowing automatic setting of the interpolated values of such object given the current state of the animation model.
The widget is designed to work with nested dataclass/pydantic style models, but will work just fine with anything else non-nested.
from pydantic import BaseModel
from qt_animation_timeline import AnimationTimelineWidget
class Circle(BaseModel):
color: tuple[int, int, int] = (255, 0, 0)
size: float = 10
filled: bool = True
other_stuff: str = "thing"
circle = Circle()
# mapping of names of tracks to a tuple of object/attribute
# any time a change in the animation occur, the object's attribute
# will be updated with the new interpolated value.
track_options = {
'color': (circle, 'color'),
'size': (circle, 'size')
}
timeline = AnimationTimelineWidget(track_options=track_options)
timeline.show()
This will allow to animate the color and size, updating the model accordingly when the playhead scrubs along the animation.
When a keyframe is created manually, it will inherit the current model value for the given attribute.
Note that this also works for nested models whenever possible:
class CircleSet(BaseModel):
circle1: Circle = Circle()
circle2: Circle = Circle()
circleset = CircleSet()
track_options = {
'circle 1': (circleset, 'circle1'),
'circle 2 size': (circleset, 'circle2.size') # or (circleset.circle2, size)
}
timeline = AnimationTimelineWidget(track_options=track_options)
timeline.show()
In this case, the whole model is considered the keyframe value, and all its elements will be interpolated.
Development
The easiest way to get started is to use the github cli and uv:
gh repo fork brisvag/qt-animation-timeline --clone
# or just
# gh repo clone brisvag/qt-animation-timeline
cd qt-animation-timeline
uv sync
Run tests:
uv run pytest
Lint files:
uv run pre-commit run --all-files
Metadata
Release files for qt-animation-timeline 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| qt_animation_timeline-0.2.1.tar.gz | 30.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| qt_animation_timeline-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 53.3 kB
Release files / qt_animation_timeline-0.2.1.tar.gz
| Download URL | qt_animation_timeline-0.2.1.tar.gz |
|---|---|
| Size | 30.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6b0e697d308fb72077055ec78a35ef87d463525ea000a8b078efa8f78667acb0
|
|
BLAKE2b-256 checksum How to use checksums |
7587daa17354c949e8859bd4184c269039b6e675e04fe4659b4f28c8d0a789e6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.
Transparency logRelease files / qt_animation_timeline-0.2.1-py3-none-any.whl
| Download URL | qt_animation_timeline-0.2.1-py3-none-any.whl |
|---|---|
| Size | 22.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1bad2d3361f70e4fb2f208568e1068195cfa1f10350bc73371c7f6cb07ef2e8e
|
|
BLAKE2b-256 checksum How to use checksums |
5700d67ecebd3be7440d11a80ad055b46446bdac14e378bb833f2fbc6a554c7f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.
Transparency log