Skip to main content

qt-animation-timeline

License PyPI Python Version CI codecov

A blender-style timeline widget for qt to edit animations.

image

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)

Source distribution for qt-animation-timeline 0.2.1
File Size Uploaded
qt_animation_timeline-0.2.1.tar.gz 30.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for qt-animation-timeline 0.2.1
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page