"PUI" Python Declarative UI Framework
Project description
Install
pip install QPUIQ
Example
Code
from PUI import State
# from PUI.tkinter import *
from PUI.PySide6 import *
# from PUI.Qt5 import *
# from PUI.flet import *
data = State()
data.var = 50
class Example(Application):
def content(self):
with Window(title="blah", size=(640,480)):
with VBox():
with Canvas():
CanvasText(data.var, data.var/2, f"blah {data.var}")
CanvasLine(data.var, data.var, data.var*2, data.var*3)
with HBox():
Button("-", self.on_minus)
Label(f"{data.var}")
Button("+", self.on_plus)
def on_minus(self):
data.var -= 1
def on_plus(self):
data.var += 1
root = Example()
root.run()
UI
DOM
Example {
QtVBox {
QtCanvas {
QtCanvasText {
},
QtCanvasLine {
}
},
QtHBox {
QtButton {
},
QtLabel {
},
QtButton {
}
}
}
}
More Example
See examples/*.py
Planned Backends
- tkinter
- PyQt5
- PySide6
- flet
- urwid (Text Mode)
Generic Expression
Elements
- HBox()
- VBox()
- Button(text, callback)
- Label(text)
- TextField(binding)
- ProgressBar(progress
0-1
) - Canvas
- CanvasText
- CanvasLine(x1, y1, x2, y2, color=0xFF0000, width=2)
Layout
- .layout(width=320, height=240, weight=1)
Hot Reload
Add these lines to your view file and run with reloadium
import reloadium
# reloadium: after_reload
def after_reload(actions):
PUIView.reload()
Progress
Use threading.locals() instead of inspect- State
Update TriggerBindingStateListStateDict- Lazy UI?
- Passing state to subview
- StateObject decorator
- Adapters
Split Application/Window, multi-windows- Navigation Stack
- View Router
LabelButtonTextFieldTimelimeView- Layout
HBoxVBox- ZBox
- Grid
- Row
- Column
- SwiftUI style overlay ??
- Canvas
TextLine- Rect
- Arc
- Image
- ...
- Table
- Tree
- Scrollbar (or as a layout setting)
- Better DOM syncer
- Prevent unnecessary nested update
- Trace Event Source (TextField) and prevent udpate it DOM Sync
- update() -> sync()/inflate()/update() ?
- Pydantic State
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
QPUIQ-0.1.8.tar.gz
(15.3 kB
view details)
Built Distribution
QPUIQ-0.1.8-py3-none-any.whl
(28.2 kB
view details)
File details
Details for the file QPUIQ-0.1.8.tar.gz
.
File metadata
- Download URL: QPUIQ-0.1.8.tar.gz
- Upload date:
- Size: 15.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eaebde822dd74fd61343c1ec89d283df231ee077b17469da043884d4a05e686f |
|
MD5 | 8afade4a0810f25f73cba55ce854dd02 |
|
BLAKE2b-256 | cc5f4d22afaad6568a6614964a5120c7666cd427198aad235704bf5f851b6be0 |
File details
Details for the file QPUIQ-0.1.8-py3-none-any.whl
.
File metadata
- Download URL: QPUIQ-0.1.8-py3-none-any.whl
- Upload date:
- Size: 28.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eaedb5c2a8ca320724b387c10509061f1357031a5dda5b4df7bf926703be34f9 |
|
MD5 | 4897b23bba034524d00f4ddcd6eb966f |
|
BLAKE2b-256 | f65315e5ebba6fd35413ee316e0fee463bc9fda3c36b5029c7643f12798c8969 |