The repo for the WinUp Library Project.
pip install winup==2.4.9
A ridiculously Pythonic and powerful framework for building beautiful desktop applications.
WinUp is a modern UI framework for Python that wraps the power of PySide6 (Qt) in a simple, declarative, and developer-friendly API. Itβs designed to let you build applications faster, write cleaner code, and enjoy the development process.
Desktop development in Python can feel clunky. WinUp was built to fix that.
Feature | WinUp Way β¨ | Raw PySide6 / Tkinter Way π |
---|---|---|
Layouts | ui.Column(children=[...]) , ui.Row(children=[...]) |
QVBoxLayout() , QHBoxLayout() , layout.addWidget() , pack() , grid() |
Styling | props={"background-color": "blue", "font-size": "16px"} |
Manual QSS strings, widget.setStyleSheet(...) , complex style objects. |
State Management | state.bind(widget, "prop", "key") |
Manual callback functions, getters/setters, StringVar() , boilerplate everywhere. |
Two-Way Binding | state.bind_two_way(input_widget, "key") |
Non-existent. Requires manual on_change handlers to update state and UI. |
Developer Tools | Built-in Hot Reloading, code profiler, and window tools out of the box. | Non-existent. Restart the entire app for every single UI change. |
Code Structure | Reusable, self-contained components with @component . |
Often leads to large, monolithic classes or procedural scripts. |
In short, WinUp provides the βkiller featuresβ of modern web frameworks (like React or Vue) for the desktop, saving you time and letting you focus on what matters: your applicationβs logic.
Feature | WinUp | PyEdifice |
---|---|---|
π§± Architecture | React-style + state | React-style + state |
π Built-in Routing | β
Yes (Router(routes={...}) ) |
β No built-in routing |
β»οΈ Lifecycle Hooks | β
on_mount , on_unmount , etc. |
β οΈ Limited (did_mount , etc.) |
π¨ Theming / Styling System | β Global & Scoped themes | β Manual CSS injection |
π² Layout Options | β Row, Column, Grid, Stack, Flexbox | β οΈ Mostly Box & HBox/VBox |
ποΈ Animations | β Built-in (fade, scale, etc.) | β None built-in |
π Hot Reloading (LHR) | β
Stable + fast (loadup dev ) |
β οΈ Experimental, limited support |
π¦ Packaging | β With LoadUp (PyInstaller-based) | β Must integrate PyInstaller manually |
π§© Component Reusability | β High, declarative | β High |
π Developer Tooling | β DevTools planned, Inspector soon | β None yet |
π± Mobile Support | β Not yet | β Not supported |
π§ Learning Curve | β Easy for Python+React users | β Easy but less tooling |
β = Built-in or robust
β οΈ = Partial or limited
β = Missing entirely
Row
and Column
objects instead of clunky box layouts.@component
decorator to create modular and reusable UI widgets from simple functions.props
. Create global βCSS-likeβ classes with style.add_style_dict
.MenuBar
, ToolBar
, StatusBar
, and SystemTrayIcon
.@tasks.run
decorator.@memo
decorator to cache component renders and prevent needless re-computation.ui.register_widget()
.state.bind()
.state.bind_two_way()
.state.subscribe()
.@profiler.measure()
decorator.Dive deeper into the features of WinUp:
WinUp is an open-source project. Contributions are welcome!
This project is licensed under the MIT License. See LICENSE for more information.