Access Windows Runtime (WinRT) APIs directly from Python! π
π οΈ Overview
What can you do with PyWinRT? π€
- π Access hardware, like Bluetooth, USB, serial ports, cameras, and more from Python.
- π₯οΈ Access Windows OS features like notifications and screen capture from Python.
- ποΈ Write WinUI 2 or WinUI 3 apps using Python.
Want to try itβInstall uv and run the following command to execute this example script:
uv run --script https://raw.githubusercontent.com/pywinrt/pywinrt/refs/heads/main/samples/text_to_speech.py# /// script # requires-python = ">=3.10" # dependencies = [ # "winrt-runtime", # "winrt-Windows.Foundation", # "winrt-Windows.Media.SpeechSynthesis", # "winrt-Windows.Media.Playback", # "winrt-Windows.Storage", # "winrt-Windows.Storage.Streams", # ] # /// import asyncio from winrt.system import Object from winrt.windows.media.speechsynthesis import SpeechSynthesizer from winrt.windows.media.playback import MediaPlayer, MediaPlayerAudioCategory async def main(): synth = SpeechSynthesizer() stream = await synth.synthesize_text_to_stream_async("Hello, World!") media_ended_event = asyncio.Event() loop = asyncio.get_running_loop() def on_media_ended(sender: MediaPlayer, args: Object): loop.call_soon_threadsafe(media_ended_event.set) player = MediaPlayer() player.audio_category = MediaPlayerAudioCategory.SPEECH player.set_stream_source(stream) player.add_media_ended(on_media_ended) player.play() await media_ended_event.wait() asyncio.run(main())
π Documentation
π Explore the full documentation here: PyWinRT Documentation
History
PyWinRT is a community-supported fork of the pywinrt tool from the Microsoft xlang project.
This repository contains:
- The code generation tool (
PyWinRT.exe). - Python bindings for the Windows SDK generated by this tool.
Evolution of PyWinRT:
- ποΈ April 2019 - Feburary 2021: Microsoft developed and published the monolithic winrt package.
- ποΈ January 2022 - August 2023: Community released updates as winsdk.
- ποΈ Starting September 2023: Bindings are now modular and published by the community as separate packages, one per Windows SDK namespace. The top-level namespace has reverted from
winsdkto the originalwinrt. - ποΈ Starting March 2025: Additional top-level namespaces
winui2andwinui3added for projections of Window UI toolkits.
βοΈ PyWinRT.exe
PyWinRT is a code generation tool that is used alongside cppwinrt to generate Python bindings for Windows Runtime APIs. It supports:
- The Windows SDK.
- Custom components.
π Pre-compiled Binary
A pre-compiled binary version of the PyWinRT tool is available via NuGet.