PawUI
官网 / 文档站:pawui.pages.dev
轻量、直接运行的 Python 声明式 UI 层。HTML 风格,Qt/PySide6 渲染(原生抗锯齿、QSS 圆角/悬停/聚焦、IME 组字正常),无构建。
安装
pip install pawui # 依赖 PySide6>=6.5,自动安装
python -m pip install --upgrade pawui
运行
pawui app.paw
也可以传统方式启动:
import pawui
pawui.run("app.paw")
语法(HTML 风格)
<Window title="你好" width="460" height="840" theme="dark">
<Column padding="24" spacing="12">
<Text size="24" bold>欢迎使用 PawUI 👋</Text>
<Text size="13" color="subtext">副标题</Text>
<Text>{$greeting}</Text>
<Row spacing="8">
<Button on_click="increment">点我 +1</Button>
<Button on_click="reset">清空</Button>
</Row>
<Input placeholder="输入你的名字..." on_change="on_name"/>
<Text>你好,{$name}</Text>
<Card label="点击量" value="{$count}"/>
</Column>
</Window>
<!-- 自定义组件 -->
<Component name="Card">
<Column padding="12" bg="surface">
<Text color="subtext">{$label}</Text>
<Text size="22" bold>{$value}</Text>
</Column>
</Component>
<script>
def increment():
state.count = int(state.get("count", 0)) + 1
</script>
要点
- 状态绑定:
{$count}/{count}/$count,在<script>里改state.count = ...界面自动刷新。 - 事件:字符串引用
<script>/main.py里的函数:on_click="函数名"。 - 组件:
<Component name="X">...</Component>定义,直接<X .../>使用。 - 主题:默认
light(蓝色主色),theme="dark"可切暗色;颜色直接引用:color="subtext"、bg="surface"。字体与字号改theme.font_family/theme.font_size,圆角用radius="12"。 - 布局:
Column纵排、Row横排,spacing/padding调节。
内置组件
44 个组件 + 2 个逻辑容器,pawui schema 会有完整属性表。
| 分类 | 组件 |
|---|---|
| 布局 | Window Column Row Grid Scroll SplitPane Panel Accordion Spacer Divider |
| 文本 | Text Markdown CodeBlock Link Badge Tooltip |
| 交互 | Button Input TextArea Checkbox RadioGroup Radio Segmented Select Slider NumberInput DatePicker TimePicker FilePicker Menu |
| 数据 | Table List VirtualList Progress Tabs Form Dialog |
| 媒体与绘图 | Image Canvas Web(需要 PySide6-Addons) Avatar Skeleton Spinner |
| 其他 | Shortcut If(条件) For(循环) |
样式:在 .paw 里写 CSS3
<Style>
:root { --brand: #ff7a1a; }
Card { radius: 14; padding: 16; bg: var(--surface); }
.card.title { font-size: 18px; font-weight: 600; }
#save:hover { bg: var(--brand); }
.card Text { color: var(--subtext); }
</Style>
选择器、CSS 变量、盒模型、flex(grow / shrink / wrap / justify / align)、
class / id 全支持。Qt 不认的 var() 与文本属性由 PawUI 编译期处理后交给 Qt。
样式没生效就跑 pawui inspect app.paw,它会告诉你每个控件真正命中了哪些选择器。
脚本操作页面
def wire():
app.on(".card", "click", lambda e: app.toast(e.target.text, "success"))
app.append("#list", "<Text>新行</Text>")
app.query("#title").add_class("highlight")
app.inject_css("#title { radius: 8px; }")
ready(wire)
query / query_all / on / append / prepend / remove / css / toast,
事件会冒泡。大列表用 <VirtualList rows="{$rows}"> —— 只渲染视口里的行,
实测 10 万行建树 139ms。
<For each="item" in="{$items}">
<If condition="{$item.done}">
<Text>{$item.name}</Text>
</If>
</For>
CLI
pawui run app.paw # 运行(或直接 pawui app.paw)
pawui watch app.paw # 热重载:保存即重建窗口
pawui check app.paw # 仅语法检查
pawui schema # 输出组件 JSON Schema
pawui render app.paw # 离屏渲染自检
pawui inspect app.paw # 控件树 + 命中的 CSS + state 订阅
pawui help # 列出文档主题(线上获取,离线回落随包文档)
pawui help theming # 查看某篇文档
pawui help --refresh # 强制刷新线上文档
pawui --version
pawui help 的正文来自官网(pawui.pages.dev/static/data.js,6 小时缓存,
离线自动回落随包 docs/),所以文档更新不用等发版。
PAWUI_DOCS_OFFLINE=1 强制离线,PAWUI_DOCS_LANG=zh|en 指定语言。
Metadata
Release files for pawui 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pawui-0.1.3.tar.gz | 232.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pawui-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 500.7 kB
Release files / pawui-0.1.3.tar.gz
| Download URL | pawui-0.1.3.tar.gz |
|---|---|
| Size | 232.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
abaf2f4187528c9567dff40a69f6da917acfaf633692bc948552edd9db4dcbc2
|
|
BLAKE2b-256 checksum How to use checksums |
d2304db3b31465a0bbdf3bd07fb6685fd448563534b586c14d756b208a6b225d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.9
|
Release files / pawui-0.1.3-py3-none-any.whl
| Download URL | pawui-0.1.3-py3-none-any.whl |
|---|---|
| Size | 268.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1fcaf93039670d82e03eb7e37603087c5ed179a15b3efcd1c003e6d74c016ead
|
|
BLAKE2b-256 checksum How to use checksums |
bab74630b6dc684d2fbe87811ff801709fa2f34926780db8488bc49b3af56712
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.9
|