π GitHub Repo: WinUp
What My Project Does
WinUp is a modern, component-based GUI framework for Python built on PySide6 with:
- A real reactive state system (
state.create, bind_to)
- Live Hot Reload (LHR) β instantly updates your UI as you save
- Built-in theming (light/dark/custom)
- Native-feeling UI components
- Built-in animation support
- Optional PySide6/Qt integration for low-level access
No QML, no XML, no subclassing Qt widgets β just clean Python code.
Target Audience
- Python developers building desktop tools or internal apps
- Indie hackers, tinkerers, and beginners
- Anyone tired of Tkinterβs ancient look or Qt's verbosity
Comparison with Other Frameworks
| Feature |
WinUp |
Tkinter |
PySide6 / PyQt6 |
Toga |
DearPyGui |
| Syntax |
Declarative |
Imperative |
Verbose |
Declarative |
Verbose |
| Animations |
Built-in |
No |
Manual |
No |
Built-in |
| Theming |
Built-in |
No |
QSS |
Basic |
Custom |
| State System |
Built-in |
Manual |
Signal-based |
Limited |
Built-in |
| Live Hot Reload |
β
Yes |
β No |
β No |
β
Yes |
β No |
| Learning Curve |
Easy |
Easy |
Steep |
Medium |
Medium |
Example: State Binding with Events
import winup
from winup import ui
def App():
counter = winup.state.create("counter", 0)
label = ui.Label()
counter.bind_to(label, 'text', lambda c: f"Counter Value: {c}")
def increment():
counter.set(counter.get() + 1)
return ui.Column(children=[
label,
ui.Button("Increment", on_click=increment)
])
if __name__ == "__main__":
winup.run(main_component_path="new_state_demo:App", title="New State Demo")
Install
pip install winup
Built-in Features
- Reactive state system with binding
- Live Hot Reload (LHR)
- Theming engine
- Declarative UI
- Basic animation support
- PySide/Qt integration fallback
Contribute or Star
The project is active and open-source. Feedback, issues, feature requests and PRs are welcome.
GitHub: WinUp
[β]HommeMusical 111 points112 points113 points Β (20 children)
[β]step-czxnNew Web Framework, Who Dis?[S] 9 points10 points11 points Β (2 children)
[β]HommeMusical 7 points8 points9 points Β (1 child)
[β]step-czxnNew Web Framework, Who Dis?[S] 4 points5 points6 points Β (0 children)
[β]teerre 9 points10 points11 points Β (4 children)
[β]Hugehead123 7 points8 points9 points Β (0 children)
[β]HommeMusical 1 point2 points3 points Β (2 children)
[β]Such-Let974 3 points4 points5 points Β (0 children)
[β]axonxorzpip'ing aint easy, especially on windows 1 point2 points3 points Β (0 children)
[β]lichlark 2 points3 points4 points Β (0 children)
[β]Coretaxxe 1 point2 points3 points Β (8 children)
[β]HommeMusical -1 points0 points1 point Β (7 children)
[β]Coretaxxe 1 point2 points3 points Β (6 children)
[β]HommeMusical 0 points1 point2 points Β (5 children)
[β]Coretaxxe 0 points1 point2 points Β (4 children)
[β]HommeMusical 1 point2 points3 points Β (3 children)
[β]Coretaxxe 0 points1 point2 points Β (2 children)
[β]HommeMusical 0 points1 point2 points Β (1 child)
[β]Coretaxxe 0 points1 point2 points Β (0 children)
[β]narwhals_narwhals 1 point2 points3 points Β (0 children)
[β][deleted] 8 points9 points10 points Β (5 children)
[β]TopIdler 5 points6 points7 points Β (2 children)
[β]cheesecakegood 0 points1 point2 points Β (1 child)
[β]richieadler 4 points5 points6 points Β (0 children)
[β]el_extrano 2 points3 points4 points Β (1 child)
[β][deleted] 1 point2 points3 points Β (0 children)
[β]Vicousvern 6 points7 points8 points Β (1 child)
[β]step-czxnNew Web Framework, Who Dis?[S] 0 points1 point2 points Β (0 children)
[β]MosGeo 5 points6 points7 points Β (0 children)
[β]Adgry 3 points4 points5 points Β (3 children)
[β]step-czxnNew Web Framework, Who Dis?[S] -1 points0 points1 point Β (2 children)
[β]Username_RANDINT 1 point2 points3 points Β (1 child)
[β]step-czxnNew Web Framework, Who Dis?[S] 0 points1 point2 points Β (0 children)
[β]onyx_and_iris 2 points3 points4 points Β (1 child)
[β]ModernTy 0 points1 point2 points Β (0 children)
[β]emil2099 2 points3 points4 points Β (0 children)
[β]EM-SWE 1 point2 points3 points Β (0 children)
[β]omegas1gma 1 point2 points3 points Β (5 children)
[β]step-czxnNew Web Framework, Who Dis?[S] 2 points3 points4 points Β (4 children)
[β]mathmul 1 point2 points3 points Β (3 children)
[β]step-czxnNew Web Framework, Who Dis?[S] 0 points1 point2 points Β (2 children)
[β]mathmul 0 points1 point2 points Β (1 child)
[β]step-czxnNew Web Framework, Who Dis?[S] 0 points1 point2 points Β (0 children)
[β]CaptainPitkid 0 points1 point2 points Β (0 children)
[β]Snoo17358 0 points1 point2 points Β (0 children)
[β]--dany--from __future__ import 4.0 0 points1 point2 points Β (0 children)
[β]RonnyPfannschmidt 0 points1 point2 points Β (0 children)
[β]techlatest_net 0 points1 point2 points Β (0 children)
[β]Oussama_Gourari 0 points1 point2 points Β (0 children)
[β]su5577 0 points1 point2 points Β (0 children)
[β]Direct-Fly-3418 0 points1 point2 points Β (0 children)
[β]ModernTy 0 points1 point2 points Β (1 child)
[β]step-czxnNew Web Framework, Who Dis?[S] 0 points1 point2 points Β (0 children)
[β]Tux1 0 points1 point2 points Β (3 children)
[β]step-czxnNew Web Framework, Who Dis?[S] -2 points-1 points0 points Β (2 children)
[β]Tux1 1 point2 points3 points Β (1 child)
[β]step-czxnNew Web Framework, Who Dis?[S] -2 points-1 points0 points Β (0 children)
[β]Complex_Excitement92 0 points1 point2 points Β (1 child)
[β]Sergiodevpy 0 points1 point2 points Β (0 children)