jadeui 1.3.0__tar.gz → 2.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {jadeui-1.3.0 → jadeui-2.3.2}/.gitignore +5 -0
- jadeui-2.3.2/PKG-INFO +250 -0
- jadeui-2.3.2/README.md +213 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/examples/README.md +2 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/examples/backdrop_demo/README.md +2 -8
- {jadeui-1.3.0 → jadeui-2.3.2}/examples/calculator/README.md +4 -9
- {jadeui-1.3.0 → jadeui-2.3.2}/examples/custom_template/README.md +2 -8
- {jadeui-1.3.0 → jadeui-2.3.2}/examples/router_demo/README.md +2 -8
- jadeui-2.3.2/examples/v23_demo/README.md +19 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/examples/vue_app/README.md +2 -8
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/__init__.py +26 -4
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/app.py +212 -14
- jadeui-2.3.2/jadeui/cli/__init__.py +5 -0
- jadeui-2.3.2/jadeui/cli/__main__.py +5 -0
- jadeui-2.3.2/jadeui/cli/build.py +424 -0
- jadeui-2.3.2/jadeui/cli/doctor.py +139 -0
- jadeui-2.3.2/jadeui/cli/init.py +135 -0
- jadeui-2.3.2/jadeui/cli/japk.py +92 -0
- jadeui-2.3.2/jadeui/cli/main.py +398 -0
- jadeui-2.3.2/jadeui/cli/project.py +193 -0
- jadeui-2.3.2/jadeui/cli/run.py +32 -0
- jadeui-2.3.2/jadeui/clipboard.py +71 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/core/dll.py +211 -30
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/core/types.py +159 -100
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/dialog.py +118 -122
- jadeui-2.3.2/jadeui/downloader.py +622 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/events.py +28 -4
- jadeui-2.3.2/jadeui/hotkey.py +199 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/ipc.py +71 -4
- jadeui-2.3.2/jadeui/japk.py +173 -0
- jadeui-2.3.2/jadeui/menu.py +340 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/notification.py +14 -4
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/router.py +9 -8
- jadeui-2.3.2/jadeui/scaffolds/__init__.py +1 -0
- jadeui-2.3.2/jadeui/scaffolds/html/.gitignore +9 -0
- jadeui-2.3.2/jadeui/scaffolds/html/README.md +28 -0
- jadeui-2.3.2/jadeui/scaffolds/html/app.py +16 -0
- jadeui-2.3.2/jadeui/scaffolds/html/pyproject.toml +12 -0
- jadeui-2.3.2/jadeui/scaffolds/html/web/index.html +82 -0
- jadeui-2.3.2/jadeui/scaffolds/react/.gitignore +12 -0
- jadeui-2.3.2/jadeui/scaffolds/react/README.md +25 -0
- jadeui-2.3.2/jadeui/scaffolds/react/app.py +23 -0
- jadeui-2.3.2/jadeui/scaffolds/react/frontend/index.html +12 -0
- jadeui-2.3.2/jadeui/scaffolds/react/frontend/package.json +19 -0
- jadeui-2.3.2/jadeui/scaffolds/react/frontend/src/App.jsx +36 -0
- jadeui-2.3.2/jadeui/scaffolds/react/frontend/src/main.jsx +9 -0
- jadeui-2.3.2/jadeui/scaffolds/react/frontend/vite.config.js +12 -0
- jadeui-2.3.2/jadeui/scaffolds/react/pyproject.toml +12 -0
- jadeui-2.3.2/jadeui/scaffolds/vue/.gitignore +12 -0
- jadeui-2.3.2/jadeui/scaffolds/vue/README.md +27 -0
- jadeui-2.3.2/jadeui/scaffolds/vue/app.py +23 -0
- jadeui-2.3.2/jadeui/scaffolds/vue/frontend/index.html +12 -0
- jadeui-2.3.2/jadeui/scaffolds/vue/frontend/package.json +18 -0
- jadeui-2.3.2/jadeui/scaffolds/vue/frontend/src/App.vue +47 -0
- jadeui-2.3.2/jadeui/scaffolds/vue/frontend/src/main.js +4 -0
- jadeui-2.3.2/jadeui/scaffolds/vue/frontend/vite.config.js +12 -0
- jadeui-2.3.2/jadeui/scaffolds/vue/pyproject.toml +12 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/server.py +76 -34
- jadeui-2.3.2/jadeui/storage.py +197 -0
- jadeui-2.3.2/jadeui/system.py +442 -0
- jadeui-2.3.2/jadeui/tray.py +249 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/window.py +536 -84
- {jadeui-1.3.0 → jadeui-2.3.2}/pyproject.toml +21 -5
- jadeui-1.3.0/PKG-INFO +0 -158
- jadeui-1.3.0/README.md +0 -123
- jadeui-1.3.0/jadeui/downloader.py +0 -405
- {jadeui-1.3.0 → jadeui-2.3.2}/examples/dialog_notification_demo/README.md +0 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/examples/simple/README.md +0 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/core/__init__.py +0 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/core/lifecycle.py +0 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/exceptions.py +0 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/templates/__init__.py +0 -0
- {jadeui-1.3.0 → jadeui-2.3.2}/jadeui/utils.py +0 -0
|
@@ -25,6 +25,7 @@ venv/
|
|
|
25
25
|
ENV/
|
|
26
26
|
env/
|
|
27
27
|
.venv/
|
|
28
|
+
.venv-*/
|
|
28
29
|
|
|
29
30
|
# IDE
|
|
30
31
|
.idea/
|
|
@@ -46,6 +47,7 @@ htmlcov/
|
|
|
46
47
|
# Build
|
|
47
48
|
*.manifest
|
|
48
49
|
*.spec
|
|
50
|
+
.tmp_jadeview_*/
|
|
49
51
|
|
|
50
52
|
# DLL (development only, included in wheel)
|
|
51
53
|
jadeui/dll/
|
|
@@ -66,3 +68,6 @@ Thumbs.db
|
|
|
66
68
|
# uv
|
|
67
69
|
.uv/
|
|
68
70
|
|
|
71
|
+
|
|
72
|
+
# vue_app build output (generated by `npm run build`)
|
|
73
|
+
examples/vue_app/web/
|
jadeui-2.3.2/PKG-INFO
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: jadeui
|
|
3
|
+
Version: 2.3.2
|
|
4
|
+
Summary: Python SDK for JadeView - Create desktop applications with WebView
|
|
5
|
+
Project-URL: Homepage, https://jade.run
|
|
6
|
+
Project-URL: Documentation, https://jade.run/python-sdk
|
|
7
|
+
Project-URL: Repository, https://github.com/ArcletProject/jadeui
|
|
8
|
+
Project-URL: Issues, https://github.com/ArcletProject/jadeui/issues
|
|
9
|
+
Author: JadeView Team
|
|
10
|
+
License: MIT
|
|
11
|
+
Keywords: desktop,gui,jadeui,jadeview,ui,webview
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
25
|
+
Classifier: Topic :: Desktop Environment
|
|
26
|
+
Classifier: Topic :: Software Development :: User Interfaces
|
|
27
|
+
Requires-Python: >=3.7
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: build>=1.0; extra == 'dev'
|
|
30
|
+
Requires-Dist: imageio; extra == 'dev'
|
|
31
|
+
Requires-Dist: mypy>=1.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
33
|
+
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
34
|
+
Provides-Extra: pyinstaller
|
|
35
|
+
Requires-Dist: pyinstaller>=6.0; extra == 'pyinstaller'
|
|
36
|
+
Description-Content-Type: text/markdown
|
|
37
|
+
|
|
38
|
+
<p align="center">
|
|
39
|
+
<img src="assets/light.svg" alt="JadeUI Logo" width="120">
|
|
40
|
+
</p>
|
|
41
|
+
|
|
42
|
+
<h1 align="center">JadeUI</h1>
|
|
43
|
+
|
|
44
|
+
<p align="center">
|
|
45
|
+
<strong>Python SDK for JadeView - 使用 Web 技术构建桌面应用</strong>
|
|
46
|
+
</p>
|
|
47
|
+
|
|
48
|
+
<p align="center">
|
|
49
|
+
<a href="https://pypi.org/project/jadeui/"><img src="https://img.shields.io/pypi/v/jadeui.svg" alt="PyPI version"></a>
|
|
50
|
+
<a href="https://pypi.org/project/jadeui/"><img src="https://img.shields.io/pypi/pyversions/jadeui.svg" alt="Python versions"></a>
|
|
51
|
+
</p>
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
JadeUI 是 [JadeView](https://jade.run) 的 Python SDK,让你可以使用 Python + Web 技术构建现代桌面应用程序。
|
|
56
|
+
|
|
57
|
+
## 特性
|
|
58
|
+
|
|
59
|
+
- **WebView 窗口** - 使用 HTML/CSS/JS 构建 UI
|
|
60
|
+
- **现代外观** - 支持 Windows 11 Mica/Acrylic 效果
|
|
61
|
+
- **主题切换** - Light/Dark/System 主题
|
|
62
|
+
- **IPC 通信** - Python 与前端双向通信
|
|
63
|
+
- **对话框 API** - 文件选择、消息框 (v1.3.0+)
|
|
64
|
+
- **通知 API** - Windows 原生桌面通知 (v1.3.0+)
|
|
65
|
+
- **系统托盘** - 托盘图标、提示与右键菜单 (v2.2.4+)
|
|
66
|
+
- **全局热键** - 应用在后台也能响应的快捷键 (v2.2.4+)
|
|
67
|
+
- **剪贴板 / 系统信息** - 剪贴板读写、显示器/语言/系统路径 (v2.2.4+)
|
|
68
|
+
- **窗口增强** - 缩放、任务栏进度/闪烁、DevTools、内容保护等 (v2.2.4+)
|
|
69
|
+
- **YAML 存储 / 系统集成** - 持久化存储、开机自启、文件图标、NTP 网络时间 (v2.3.0+)
|
|
70
|
+
- **窗口集成增强** - 不进任务栏、不抢焦点、窗口层级、HWND 反查窗口 ID (v2.3.0+)
|
|
71
|
+
- **打包体积** - 极小的依赖,打包后体积仅有8MB左右
|
|
72
|
+
|
|
73
|
+
> 本版本对应 JadeView 原生 **v2.3.0 (Build 26G02)**。从 2.2.4 升级的变更与实机验收结果详见 [docs/UPGRADE_v2.3.0.md](docs/UPGRADE_v2.3.0.md)。
|
|
74
|
+
|
|
75
|
+
## 安装
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
pip install jadeui
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## CLI 快速开始
|
|
82
|
+
|
|
83
|
+
安装后可使用统一命令行工具 `jadeui`:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
jadeui init my-app --frontend html # 也可选 vue / react
|
|
87
|
+
cd my-app
|
|
88
|
+
jadeui doctor # 检查 Python / DLL / Nuitka / Node+asar
|
|
89
|
+
jadeui run # 开发运行
|
|
90
|
+
jadeui japk # 前端打包为明文 app.japk(需 @electron/asar)
|
|
91
|
+
jadeui build # 宿主打包为 exe(默认 Nuitka)
|
|
92
|
+
jadeui build --packager pyinstaller # 可选 PyInstaller
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
常用子命令:`init` / `run` / `doctor` / `japk` / `build` / `download` / `clean`。
|
|
96
|
+
|
|
97
|
+
旧入口 `jadeui-download`、`jadeui-clean` 仍然可用。
|
|
98
|
+
|
|
99
|
+
项目元数据(可选)读 `pyproject.toml`:CLI 显式参数优先,其次 `[tool.jadeui]`,再回退 `[project].name`(例如 `jadeui build` 的默认输出名)。与 uv / conda 等共用同一份 `pyproject.toml` 时互不冲突——JadeUI 只使用 `[tool.jadeui]` 命名空间。
|
|
100
|
+
|
|
101
|
+
## JadeView DLL 更新规则
|
|
102
|
+
|
|
103
|
+
JadeUI SDK 只会在已适配的 JadeView API 版本内自动选择最新构建号。例如 `2.3.0.26G02` 可以自动更新到同一 tag 下的后续 build,但不会自动跨到 `2.4` 或其它 release tag。
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
jadeui download # 下载当前 SDK 适配版本的最新 build
|
|
107
|
+
jadeui download --build 26G02 # 固定下载指定 build
|
|
108
|
+
# 兼容旧命令:
|
|
109
|
+
jadeui-download
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
当前按 Python 解释器架构选择上游原生包:
|
|
113
|
+
|
|
114
|
+
- Windows: `x86` / `x64` / `arm64`,下载 `JadeView_win_{arch}_*.zip`,加载 `JadeView_{arch}.dll`
|
|
115
|
+
|
|
116
|
+
跨 minor/major 的原生版本升级(如 `2.2` -> `2.3`)可能包含 ABI/API 变化,必须由 SDK 显式适配后再升级。
|
|
117
|
+
|
|
118
|
+
## 快速开始
|
|
119
|
+
|
|
120
|
+
### CLI 脚手架
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
jadeui init my-app --frontend html
|
|
124
|
+
cd my-app
|
|
125
|
+
jadeui run
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 最简模式
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
from jadeui import Window
|
|
132
|
+
|
|
133
|
+
Window(title="Hello JadeUI", url="https://example.com").run()
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 本地应用(自动检测 web 目录)
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
from jadeui import Window
|
|
140
|
+
|
|
141
|
+
Window(title="My App").run() # 自动加载 web/index.html
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 完整模式(多窗口、全局事件)
|
|
145
|
+
|
|
146
|
+
```python
|
|
147
|
+
from jadeui import JadeUIApp, Window
|
|
148
|
+
|
|
149
|
+
app = JadeUIApp()
|
|
150
|
+
|
|
151
|
+
@app.on_ready
|
|
152
|
+
def on_ready():
|
|
153
|
+
Window(title="Window 1", url="https://example.com").show()
|
|
154
|
+
Window(title="Window 2", url="https://google.com").show()
|
|
155
|
+
|
|
156
|
+
app.run()
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## 示例项目
|
|
160
|
+
|
|
161
|
+
查看 [examples](./examples) 目录获取完整示例:
|
|
162
|
+
|
|
163
|
+
| 示例 | 说明 |
|
|
164
|
+
|------|------|
|
|
165
|
+
| [simple](./examples/simple) | **最简示例** - 几行代码创建应用 |
|
|
166
|
+
| [calculator](./examples/calculator) | 基础计算器,展示窗口创建和 IPC 通信 |
|
|
167
|
+
| [backdrop_demo](./examples/backdrop_demo) | Windows 11 Mica/Acrylic 背景效果 |
|
|
168
|
+
| [router_demo](./examples/router_demo) | 内置路由系统实现多页面应用 |
|
|
169
|
+
| [custom_template](./examples/custom_template) | 自定义 HTML 模板和样式 |
|
|
170
|
+
| [vue_app](./examples/vue_app) | Vue.js + JadeUI 集成示例 |
|
|
171
|
+
| [dialog_notification_demo](./examples/dialog_notification_demo) | 对话框与桌面通知 (v1.3.0+) |
|
|
172
|
+
| [p3_demo](./examples/p3_demo) | **系统托盘 / 全局热键 / 剪贴板 / 系统信息 / 窗口增强** (v2.2.4+) |
|
|
173
|
+
| [v23_demo](./examples/v23_demo) | **YAML 存储 / 窗口层级 / 文件图标 / NTP / 拖拽事件** (v2.3.0+) |
|
|
174
|
+
|
|
175
|
+
### 效果预览
|
|
176
|
+
|
|
177
|
+
| Simple | Calculator | Backdrop |
|
|
178
|
+
|:---:|:---:|:---:|
|
|
179
|
+
|  |  |  |
|
|
180
|
+
|
|
181
|
+
| Router | Custom Template | Vue App |
|
|
182
|
+
|:---:|:---:|:---:|
|
|
183
|
+
|  |  |  |
|
|
184
|
+
|
|
185
|
+
## API 文档
|
|
186
|
+
|
|
187
|
+
完整文档请访问: https://jade.run/python-sdk
|
|
188
|
+
|
|
189
|
+
## 前端资源包(JAPK)
|
|
190
|
+
|
|
191
|
+
JAPK 打包的是 **HTML/CSS/JS 等前端资源**(不是 Python exe)。官方说明见 [JAPK 文档](https://jade.run/docs/api/japk)。
|
|
192
|
+
|
|
193
|
+
| 方式 | 工具 | 说明 |
|
|
194
|
+
|------|------|------|
|
|
195
|
+
| 明文 ASAR 兼容包 | `jadeui japk`(底层 `@electron/asar`) | 开发/内部工具,命令行可用 |
|
|
196
|
+
| 混淆 / 签名包 | [JadePack](https://jade.run/jadepack) 桌面客户端 | **生产推荐**(签名包为 AES-256-GCM + Ed25519) |
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# 需先安装 Node.js,并执行: npm install -g @electron/asar
|
|
200
|
+
jadeui japk # 默认 web -> dist/app.japk
|
|
201
|
+
jadeui japk --src web -o dist/app.japk
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
运行时可用目录、`.japk` 路径或内存加载:
|
|
205
|
+
|
|
206
|
+
```python
|
|
207
|
+
from jadeui import Window
|
|
208
|
+
|
|
209
|
+
Window(title="My App").run(japk="dist/app.japk")
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## 打包发布(宿主 exe)
|
|
213
|
+
|
|
214
|
+
默认使用 **Nuitka** 将 Python 宿主打包为独立可执行文件;也可用 PyInstaller:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# Nuitka(推荐;onefile 建议使用 4.0rc7)
|
|
218
|
+
# pip install https://github.com/HG-ha/jadeui/raw/main/scripts/nuitka-4.0.rc7.zip
|
|
219
|
+
jadeui build app.py -o your_app
|
|
220
|
+
|
|
221
|
+
# 可选 PyInstaller
|
|
222
|
+
pip install jadeui[pyinstaller]
|
|
223
|
+
jadeui build app.py -o your_app --packager pyinstaller
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
兼容旧脚本:`python scripts/build.py your_app.py -o your_app`(内部转发到同一实现)。
|
|
227
|
+
|
|
228
|
+
## 系统要求
|
|
229
|
+
|
|
230
|
+
- **操作系统**: Windows 10/11
|
|
231
|
+
- **Python**: 3.7+
|
|
232
|
+
- **Python 架构**: Windows 支持 x86 / x64 / arm64。JadeUI 会按 Python 解释器架构下载匹配的 JadeView 原生库。
|
|
233
|
+
|
|
234
|
+
> 官方 JadeView 暂未提供 Linux 原生库(仍在开发中),当前 SDK 仅支持 Windows。
|
|
235
|
+
|
|
236
|
+
### 使用注意
|
|
237
|
+
|
|
238
|
+
- 单次 `jade.invoke` payload 建议不超过 `1000KB`。实测 `1023KB` 可用,但精确 `1MiB` payload 加上 IPC 封装后会超过 JadeView bridge 的消息上限并被拒绝;更大的数据应使用分片或文件传递。
|
|
239
|
+
|
|
240
|
+
## 许可证
|
|
241
|
+
|
|
242
|
+
MIT License
|
|
243
|
+
|
|
244
|
+
## 链接
|
|
245
|
+
|
|
246
|
+
- [Python SDK 文档](https://jade.run/python-sdk)
|
|
247
|
+
- [JadeView 官网](https://jade.run)
|
|
248
|
+
- [GitHub](https://github.com/HG-ha/Jadeui)
|
|
249
|
+
- [PyPI](https://pypi.org/project/jadeui/)
|
|
250
|
+
|
jadeui-2.3.2/README.md
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/light.svg" alt="JadeUI Logo" width="120">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">JadeUI</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>Python SDK for JadeView - 使用 Web 技术构建桌面应用</strong>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://pypi.org/project/jadeui/"><img src="https://img.shields.io/pypi/v/jadeui.svg" alt="PyPI version"></a>
|
|
13
|
+
<a href="https://pypi.org/project/jadeui/"><img src="https://img.shields.io/pypi/pyversions/jadeui.svg" alt="Python versions"></a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
JadeUI 是 [JadeView](https://jade.run) 的 Python SDK,让你可以使用 Python + Web 技术构建现代桌面应用程序。
|
|
19
|
+
|
|
20
|
+
## 特性
|
|
21
|
+
|
|
22
|
+
- **WebView 窗口** - 使用 HTML/CSS/JS 构建 UI
|
|
23
|
+
- **现代外观** - 支持 Windows 11 Mica/Acrylic 效果
|
|
24
|
+
- **主题切换** - Light/Dark/System 主题
|
|
25
|
+
- **IPC 通信** - Python 与前端双向通信
|
|
26
|
+
- **对话框 API** - 文件选择、消息框 (v1.3.0+)
|
|
27
|
+
- **通知 API** - Windows 原生桌面通知 (v1.3.0+)
|
|
28
|
+
- **系统托盘** - 托盘图标、提示与右键菜单 (v2.2.4+)
|
|
29
|
+
- **全局热键** - 应用在后台也能响应的快捷键 (v2.2.4+)
|
|
30
|
+
- **剪贴板 / 系统信息** - 剪贴板读写、显示器/语言/系统路径 (v2.2.4+)
|
|
31
|
+
- **窗口增强** - 缩放、任务栏进度/闪烁、DevTools、内容保护等 (v2.2.4+)
|
|
32
|
+
- **YAML 存储 / 系统集成** - 持久化存储、开机自启、文件图标、NTP 网络时间 (v2.3.0+)
|
|
33
|
+
- **窗口集成增强** - 不进任务栏、不抢焦点、窗口层级、HWND 反查窗口 ID (v2.3.0+)
|
|
34
|
+
- **打包体积** - 极小的依赖,打包后体积仅有8MB左右
|
|
35
|
+
|
|
36
|
+
> 本版本对应 JadeView 原生 **v2.3.0 (Build 26G02)**。从 2.2.4 升级的变更与实机验收结果详见 [docs/UPGRADE_v2.3.0.md](docs/UPGRADE_v2.3.0.md)。
|
|
37
|
+
|
|
38
|
+
## 安装
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pip install jadeui
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## CLI 快速开始
|
|
45
|
+
|
|
46
|
+
安装后可使用统一命令行工具 `jadeui`:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
jadeui init my-app --frontend html # 也可选 vue / react
|
|
50
|
+
cd my-app
|
|
51
|
+
jadeui doctor # 检查 Python / DLL / Nuitka / Node+asar
|
|
52
|
+
jadeui run # 开发运行
|
|
53
|
+
jadeui japk # 前端打包为明文 app.japk(需 @electron/asar)
|
|
54
|
+
jadeui build # 宿主打包为 exe(默认 Nuitka)
|
|
55
|
+
jadeui build --packager pyinstaller # 可选 PyInstaller
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
常用子命令:`init` / `run` / `doctor` / `japk` / `build` / `download` / `clean`。
|
|
59
|
+
|
|
60
|
+
旧入口 `jadeui-download`、`jadeui-clean` 仍然可用。
|
|
61
|
+
|
|
62
|
+
项目元数据(可选)读 `pyproject.toml`:CLI 显式参数优先,其次 `[tool.jadeui]`,再回退 `[project].name`(例如 `jadeui build` 的默认输出名)。与 uv / conda 等共用同一份 `pyproject.toml` 时互不冲突——JadeUI 只使用 `[tool.jadeui]` 命名空间。
|
|
63
|
+
|
|
64
|
+
## JadeView DLL 更新规则
|
|
65
|
+
|
|
66
|
+
JadeUI SDK 只会在已适配的 JadeView API 版本内自动选择最新构建号。例如 `2.3.0.26G02` 可以自动更新到同一 tag 下的后续 build,但不会自动跨到 `2.4` 或其它 release tag。
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
jadeui download # 下载当前 SDK 适配版本的最新 build
|
|
70
|
+
jadeui download --build 26G02 # 固定下载指定 build
|
|
71
|
+
# 兼容旧命令:
|
|
72
|
+
jadeui-download
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
当前按 Python 解释器架构选择上游原生包:
|
|
76
|
+
|
|
77
|
+
- Windows: `x86` / `x64` / `arm64`,下载 `JadeView_win_{arch}_*.zip`,加载 `JadeView_{arch}.dll`
|
|
78
|
+
|
|
79
|
+
跨 minor/major 的原生版本升级(如 `2.2` -> `2.3`)可能包含 ABI/API 变化,必须由 SDK 显式适配后再升级。
|
|
80
|
+
|
|
81
|
+
## 快速开始
|
|
82
|
+
|
|
83
|
+
### CLI 脚手架
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
jadeui init my-app --frontend html
|
|
87
|
+
cd my-app
|
|
88
|
+
jadeui run
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 最简模式
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
from jadeui import Window
|
|
95
|
+
|
|
96
|
+
Window(title="Hello JadeUI", url="https://example.com").run()
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 本地应用(自动检测 web 目录)
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
from jadeui import Window
|
|
103
|
+
|
|
104
|
+
Window(title="My App").run() # 自动加载 web/index.html
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 完整模式(多窗口、全局事件)
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
from jadeui import JadeUIApp, Window
|
|
111
|
+
|
|
112
|
+
app = JadeUIApp()
|
|
113
|
+
|
|
114
|
+
@app.on_ready
|
|
115
|
+
def on_ready():
|
|
116
|
+
Window(title="Window 1", url="https://example.com").show()
|
|
117
|
+
Window(title="Window 2", url="https://google.com").show()
|
|
118
|
+
|
|
119
|
+
app.run()
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 示例项目
|
|
123
|
+
|
|
124
|
+
查看 [examples](./examples) 目录获取完整示例:
|
|
125
|
+
|
|
126
|
+
| 示例 | 说明 |
|
|
127
|
+
|------|------|
|
|
128
|
+
| [simple](./examples/simple) | **最简示例** - 几行代码创建应用 |
|
|
129
|
+
| [calculator](./examples/calculator) | 基础计算器,展示窗口创建和 IPC 通信 |
|
|
130
|
+
| [backdrop_demo](./examples/backdrop_demo) | Windows 11 Mica/Acrylic 背景效果 |
|
|
131
|
+
| [router_demo](./examples/router_demo) | 内置路由系统实现多页面应用 |
|
|
132
|
+
| [custom_template](./examples/custom_template) | 自定义 HTML 模板和样式 |
|
|
133
|
+
| [vue_app](./examples/vue_app) | Vue.js + JadeUI 集成示例 |
|
|
134
|
+
| [dialog_notification_demo](./examples/dialog_notification_demo) | 对话框与桌面通知 (v1.3.0+) |
|
|
135
|
+
| [p3_demo](./examples/p3_demo) | **系统托盘 / 全局热键 / 剪贴板 / 系统信息 / 窗口增强** (v2.2.4+) |
|
|
136
|
+
| [v23_demo](./examples/v23_demo) | **YAML 存储 / 窗口层级 / 文件图标 / NTP / 拖拽事件** (v2.3.0+) |
|
|
137
|
+
|
|
138
|
+
### 效果预览
|
|
139
|
+
|
|
140
|
+
| Simple | Calculator | Backdrop |
|
|
141
|
+
|:---:|:---:|:---:|
|
|
142
|
+
|  |  |  |
|
|
143
|
+
|
|
144
|
+
| Router | Custom Template | Vue App |
|
|
145
|
+
|:---:|:---:|:---:|
|
|
146
|
+
|  |  |  |
|
|
147
|
+
|
|
148
|
+
## API 文档
|
|
149
|
+
|
|
150
|
+
完整文档请访问: https://jade.run/python-sdk
|
|
151
|
+
|
|
152
|
+
## 前端资源包(JAPK)
|
|
153
|
+
|
|
154
|
+
JAPK 打包的是 **HTML/CSS/JS 等前端资源**(不是 Python exe)。官方说明见 [JAPK 文档](https://jade.run/docs/api/japk)。
|
|
155
|
+
|
|
156
|
+
| 方式 | 工具 | 说明 |
|
|
157
|
+
|------|------|------|
|
|
158
|
+
| 明文 ASAR 兼容包 | `jadeui japk`(底层 `@electron/asar`) | 开发/内部工具,命令行可用 |
|
|
159
|
+
| 混淆 / 签名包 | [JadePack](https://jade.run/jadepack) 桌面客户端 | **生产推荐**(签名包为 AES-256-GCM + Ed25519) |
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# 需先安装 Node.js,并执行: npm install -g @electron/asar
|
|
163
|
+
jadeui japk # 默认 web -> dist/app.japk
|
|
164
|
+
jadeui japk --src web -o dist/app.japk
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
运行时可用目录、`.japk` 路径或内存加载:
|
|
168
|
+
|
|
169
|
+
```python
|
|
170
|
+
from jadeui import Window
|
|
171
|
+
|
|
172
|
+
Window(title="My App").run(japk="dist/app.japk")
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## 打包发布(宿主 exe)
|
|
176
|
+
|
|
177
|
+
默认使用 **Nuitka** 将 Python 宿主打包为独立可执行文件;也可用 PyInstaller:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# Nuitka(推荐;onefile 建议使用 4.0rc7)
|
|
181
|
+
# pip install https://github.com/HG-ha/jadeui/raw/main/scripts/nuitka-4.0.rc7.zip
|
|
182
|
+
jadeui build app.py -o your_app
|
|
183
|
+
|
|
184
|
+
# 可选 PyInstaller
|
|
185
|
+
pip install jadeui[pyinstaller]
|
|
186
|
+
jadeui build app.py -o your_app --packager pyinstaller
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
兼容旧脚本:`python scripts/build.py your_app.py -o your_app`(内部转发到同一实现)。
|
|
190
|
+
|
|
191
|
+
## 系统要求
|
|
192
|
+
|
|
193
|
+
- **操作系统**: Windows 10/11
|
|
194
|
+
- **Python**: 3.7+
|
|
195
|
+
- **Python 架构**: Windows 支持 x86 / x64 / arm64。JadeUI 会按 Python 解释器架构下载匹配的 JadeView 原生库。
|
|
196
|
+
|
|
197
|
+
> 官方 JadeView 暂未提供 Linux 原生库(仍在开发中),当前 SDK 仅支持 Windows。
|
|
198
|
+
|
|
199
|
+
### 使用注意
|
|
200
|
+
|
|
201
|
+
- 单次 `jade.invoke` payload 建议不超过 `1000KB`。实测 `1023KB` 可用,但精确 `1MiB` payload 加上 IPC 封装后会超过 JadeView bridge 的消息上限并被拒绝;更大的数据应使用分片或文件传递。
|
|
202
|
+
|
|
203
|
+
## 许可证
|
|
204
|
+
|
|
205
|
+
MIT License
|
|
206
|
+
|
|
207
|
+
## 链接
|
|
208
|
+
|
|
209
|
+
- [Python SDK 文档](https://jade.run/python-sdk)
|
|
210
|
+
- [JadeView 官网](https://jade.run)
|
|
211
|
+
- [GitHub](https://github.com/HG-ha/Jadeui)
|
|
212
|
+
- [PyPI](https://pypi.org/project/jadeui/)
|
|
213
|
+
|
|
@@ -19,6 +19,8 @@ Window(title="My App", url="https://example.com").run()
|
|
|
19
19
|
| [backdrop_demo](./backdrop_demo/) | Windows 11 Mica/Acrylic 背景效果 | ⭐⭐ |
|
|
20
20
|
| [dialog_notification_demo](./dialog_notification_demo/) | **对话框和通知** (v1.3.0+) | ⭐⭐ |
|
|
21
21
|
| [router_demo](./router_demo/) | 内置路由系统,多页面应用 | ⭐⭐⭐ |
|
|
22
|
+
| [p3_demo](./p3_demo/) | 系统托盘、全局热键、剪贴板、系统信息、窗口增强 (v2.2.4+) | ⭐⭐⭐ |
|
|
23
|
+
| [v23_demo](./v23_demo/) | YAML 存储、窗口层级、文件图标、NTP、拖拽事件 (v2.3.0+) | ⭐⭐⭐ |
|
|
22
24
|
| [custom_template](./custom_template/) | 自定义 HTML 模板 | ⭐⭐⭐ |
|
|
23
25
|
| [vue_app](./vue_app/) | Vue.js 前端框架集成 | ⭐⭐⭐ |
|
|
24
26
|
|
|
@@ -17,16 +17,10 @@ python app.py
|
|
|
17
17
|
|
|
18
18
|
## 打包
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
在 `examples/backdrop_demo` 目录下执行:
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
然后在 `examples/backdrop_demo` 目录下执行:
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
python ../../scripts/build.py app.py -o backdrop
|
|
23
|
+
jadeui build app.py -o backdrop
|
|
30
24
|
```
|
|
31
25
|
|
|
32
26
|
## 背景材料
|
|
@@ -18,19 +18,14 @@ python examples/calculator/app.py
|
|
|
18
18
|
|
|
19
19
|
## 打包
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
在 `examples/calculator` 目录下执行:
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
|
|
24
|
+
jadeui build app.py -o calculator
|
|
25
|
+
# 或: jadeui build app.py -o calculator --packager pyinstaller
|
|
25
26
|
```
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
python ../../scripts/build.py app.py -o calculator
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
脚本会自动包含 `web` 目录和 `web/favicon.png` 图标。
|
|
28
|
+
会自动包含 `web` 目录和 `web/favicon.png` 图标(若存在)。
|
|
34
29
|
|
|
35
30
|
## 文件结构
|
|
36
31
|
|
|
@@ -16,16 +16,10 @@ python app.py
|
|
|
16
16
|
|
|
17
17
|
## 打包
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
在 `examples/custom_template` 目录下执行:
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
然后在 `examples/custom_template` 目录下执行:
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
python ../../scripts/build.py app.py -o custom
|
|
22
|
+
jadeui build app.py -o custom
|
|
29
23
|
```
|
|
30
24
|
|
|
31
25
|
## 文件结构
|
|
@@ -17,16 +17,10 @@ python app.py
|
|
|
17
17
|
|
|
18
18
|
## 打包
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
在 `examples/router_demo` 目录下执行:
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
然后在 `examples/router_demo` 目录下执行:
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
python ../../scripts/build.py app.py -o router_demo
|
|
23
|
+
jadeui build app.py -o router_demo
|
|
30
24
|
```
|
|
31
25
|
|
|
32
26
|
## 文件结构
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# JadeUI v2.3 Demo
|
|
2
|
+
|
|
3
|
+
演示 JadeView v2.3 适配后的常用能力:
|
|
4
|
+
|
|
5
|
+
- YAML 存储:写入、读取(含 `get_str`)、列 key、清理
|
|
6
|
+
- 窗口:HWND、跳过任务栏、不抢焦点、窗口层级
|
|
7
|
+
- 系统:文件图标、开机自启状态、NTP、打印机列表
|
|
8
|
+
- 拖拽:`drag-drop` 阶段事件
|
|
9
|
+
- 自定义标题栏:`jade-region-drag` / `jade-region-no-drag`
|
|
10
|
+
|
|
11
|
+
## 运行
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
python examples/v23_demo/app.py
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
写法与其它示例一致:`JadeUIApp` + `LocalServer` + `IPCManager`,在 `@app.on_ready` 里创建窗口。
|
|
18
|
+
|
|
19
|
+
`Skip Taskbar`、`No Activate`、窗口层级和拖拽需要手动观察;`NTP` 依赖本机网络。
|
|
@@ -43,16 +43,10 @@ python app.py
|
|
|
43
43
|
|
|
44
44
|
### 4. 打包
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
在 `examples/vue_app` 目录下执行:
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
然后在 `examples/vue_app` 目录下执行:
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
python ../../scripts/build.py app.py -o vueapp
|
|
49
|
+
jadeui build app.py -o vueapp
|
|
56
50
|
```
|
|
57
51
|
|
|
58
52
|
## 开发模式
|
|
@@ -43,17 +43,20 @@ With IPC:
|
|
|
43
43
|
|
|
44
44
|
from . import utils
|
|
45
45
|
from .app import JadeUIApp
|
|
46
|
+
from .clipboard import Clipboard
|
|
46
47
|
from .core.types import RGBA, WebViewSettings, WebViewWindowOptions
|
|
47
48
|
from .dialog import Dialog, MessageBoxType, OpenDialogProperties
|
|
48
49
|
from .downloader import (
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
from .downloader import (
|
|
50
|
+
DLL_API_VERSION,
|
|
51
|
+
DLL_BUILD,
|
|
52
52
|
download_dll,
|
|
53
53
|
ensure_dll,
|
|
54
54
|
find_dll,
|
|
55
55
|
get_architecture,
|
|
56
56
|
)
|
|
57
|
+
from .downloader import (
|
|
58
|
+
VERSION as DLL_VERSION,
|
|
59
|
+
)
|
|
57
60
|
from .events import EventEmitter, Events
|
|
58
61
|
from .exceptions import (
|
|
59
62
|
DLLLoadError,
|
|
@@ -63,13 +66,19 @@ from .exceptions import (
|
|
|
63
66
|
ServerError,
|
|
64
67
|
WindowCreationError,
|
|
65
68
|
)
|
|
69
|
+
from .hotkey import HotKey
|
|
66
70
|
from .ipc import IPCManager
|
|
71
|
+
from .japk import Japk, JapkError
|
|
72
|
+
from .menu import Menu
|
|
67
73
|
from .notification import Notification
|
|
68
74
|
from .router import Router
|
|
69
75
|
from .server import LocalServer
|
|
76
|
+
from .storage import Storage
|
|
77
|
+
from .system import CLEAR_DATA_CONFIRM_TOKEN, System
|
|
78
|
+
from .tray import Tray
|
|
70
79
|
from .window import Backdrop, Theme, Window
|
|
71
80
|
|
|
72
|
-
__version__ = "
|
|
81
|
+
__version__ = "2.3.2"
|
|
73
82
|
__author__ = "JadeView Team"
|
|
74
83
|
__license__ = "MIT"
|
|
75
84
|
|
|
@@ -86,6 +95,17 @@ __all__ = [
|
|
|
86
95
|
"OpenDialogProperties",
|
|
87
96
|
# Notification API (v1.3.0+)
|
|
88
97
|
"Notification",
|
|
98
|
+
# P3 APIs (JadeView 2.x)
|
|
99
|
+
"Clipboard",
|
|
100
|
+
"System",
|
|
101
|
+
"CLEAR_DATA_CONFIRM_TOKEN",
|
|
102
|
+
"Storage",
|
|
103
|
+
"HotKey",
|
|
104
|
+
"Tray",
|
|
105
|
+
"Menu",
|
|
106
|
+
# JAPK
|
|
107
|
+
"Japk",
|
|
108
|
+
"JapkError",
|
|
89
109
|
# Constants
|
|
90
110
|
"Theme",
|
|
91
111
|
"Backdrop",
|
|
@@ -108,7 +128,9 @@ __all__ = [
|
|
|
108
128
|
"ensure_dll",
|
|
109
129
|
"find_dll",
|
|
110
130
|
"get_architecture",
|
|
131
|
+
"DLL_API_VERSION",
|
|
111
132
|
"DLL_VERSION",
|
|
133
|
+
"DLL_BUILD",
|
|
112
134
|
# Utilities
|
|
113
135
|
"utils",
|
|
114
136
|
# Memory management (v1.0+)
|