nextpytk 0.2.0__tar.gz → 0.3.0__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.
- {nextpytk-0.2.0 → nextpytk-0.3.0}/PKG-INFO +2 -2
- nextpytk-0.3.0/ROADMAP.md +87 -0
- {nextpytk-0.2.0 → nextpytk-0.3.0}/pyproject.toml +6 -2
- nextpytk-0.3.0/src/nextpytk/app.py +2238 -0
- {nextpytk-0.2.0 → nextpytk-0.3.0}/src/nextpytk/layout.py +138 -9
- {nextpytk-0.2.0 → nextpytk-0.3.0}/src/nextpytk/types.py +16 -0
- {nextpytk-0.2.0 → nextpytk-0.3.0}/src/nextpytk/widgets.py +7 -2
- nextpytk-0.2.0/ROADMAP.md +0 -68
- nextpytk-0.2.0/src/nextpytk/app.py +0 -1376
- {nextpytk-0.2.0 → nextpytk-0.3.0}/.gitignore +0 -0
- {nextpytk-0.2.0 → nextpytk-0.3.0}/LICENSE +0 -0
- {nextpytk-0.2.0 → nextpytk-0.3.0}/README.md +0 -0
- {nextpytk-0.2.0 → nextpytk-0.3.0}/src/nextpytk/__init__.py +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nextpytk
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Flask-style decorator API for tkinter GUI: schema-driven, A11y-first, agent-compatible.
|
|
5
|
-
Project-URL: Homepage, https://github.com/nishimotz/
|
|
5
|
+
Project-URL: Homepage, https://github.com/nishimotz/nextpytk
|
|
6
6
|
Author: Takuya Nishimoto
|
|
7
7
|
License: MIT
|
|
8
8
|
License-File: LICENSE
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# ROADMAP — nextpytk
|
|
2
|
+
|
|
3
|
+
## Snapshot (v0.3.0)
|
|
4
|
+
|
|
5
|
+
### Implemented widgets (`@app.*`)
|
|
6
|
+
|
|
7
|
+
| kind | Notes |
|
|
8
|
+
|------|-------|
|
|
9
|
+
| `label` / `status` / `message` | Display / word-wrap |
|
|
10
|
+
| `button` / `entry` | ttk, `state=` support |
|
|
11
|
+
| `checkbutton` / `radiobutton` / `scale` / `spinbox` | ttk |
|
|
12
|
+
| `text` / `listbox` / `canvas` | tk (Text: tags, paired sync pending) |
|
|
13
|
+
| `treeview` | Multi-column (`show="headings"`) |
|
|
14
|
+
| `paned` | `ttk.Panedwindow` + `with app.pane(...)` |
|
|
15
|
+
| `progressbar` | `state[key]` / `{name}_running` for determinate/indeterminate |
|
|
16
|
+
| `bind` | Global shortcuts (annotates matching button) |
|
|
17
|
+
|
|
18
|
+
Infrastructure: `Layout` (pack/grid), `@app.multiview`, `run` / `run_async` / `spawn` / `@app.job`, `schema()`, builder registry, a11y choke point `_apply_a11y`.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Near term (v0.3.x)
|
|
23
|
+
|
|
24
|
+
### Type hints
|
|
25
|
+
|
|
26
|
+
- [ ] TypedDict / Protocol for decorator arguments (Pyright/mypy completion)
|
|
27
|
+
- [ ] Literal types for tkinter constants (`tk.LEFT`, `tk.RIGHT`, `tk.NSEW`, etc.)
|
|
28
|
+
- [ ] Fluent API equivalent to `_GridBuilder.columnconfigure`
|
|
29
|
+
|
|
30
|
+
### Widget expansion
|
|
31
|
+
|
|
32
|
+
- [ ] `@app.combobox` / `@app.menubar`
|
|
33
|
+
- [ ] Per-widget `bind` (`<<ListboxSelect>>`, `<Double-1>`, etc. — separate from global `bind`)
|
|
34
|
+
- [ ] listbox callback value design: pass selection index instead of display string (unify with `treeview`)
|
|
35
|
+
- [ ] `@app.text` enhancements — `tag_config`, read-only, paired sync scroll
|
|
36
|
+
|
|
37
|
+
### A11y
|
|
38
|
+
|
|
39
|
+
- [ ] Tk 9.1 `tk accessible set_acc_*` real-device verification (9.1b0 + NVDA)
|
|
40
|
+
- [ ] Role vocabulary mapping to Tk side
|
|
41
|
+
- [ ] Automatic `emit_selection_change` (leverage `apply_state` knowing which widgets changed)
|
|
42
|
+
|
|
43
|
+
### Layout DSL
|
|
44
|
+
|
|
45
|
+
- [ ] Nested frames (`Layout` inside `Layout`)
|
|
46
|
+
- [ ] Global default for `padx`/`pady`
|
|
47
|
+
- [ ] `Layout.paired(..., sync_yscroll=True)` — left/right text sync
|
|
48
|
+
|
|
49
|
+
### Public runtime API
|
|
50
|
+
|
|
51
|
+
- [x] `build_widgets()`, `widget()`, `widget_kind()`, `widget_specs()`
|
|
52
|
+
- [x] `apply_state()`, `sync()` — reusable from custom runners
|
|
53
|
+
- [x] `app.run(multiview="...")` entry point
|
|
54
|
+
- [x] `register_widget_builder()` — public API for custom kinds
|
|
55
|
+
|
|
56
|
+
### Agent / LLM integration
|
|
57
|
+
|
|
58
|
+
- [ ] Expose `schema()` as Function Calling definition (bind `sequence`, treeview column defs, etc.)
|
|
59
|
+
- [ ] `@agent_tool` integration (GUI operations as agent vocabulary)
|
|
60
|
+
- [ ] `@app.filepicker` — `filedialog` wrapper (tool name in schema)
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Longer term
|
|
65
|
+
|
|
66
|
+
### ttk Style layer
|
|
67
|
+
|
|
68
|
+
- [ ] `Layout.style("my_button", background=..., font=...)` style definitions
|
|
69
|
+
- [ ] Theme switching (`ttk.Style().theme_use(...)`)
|
|
70
|
+
|
|
71
|
+
### Async job integration
|
|
72
|
+
|
|
73
|
+
- [x] `app.run_async()` + `app.spawn()` — async event loop coexisting with Tk
|
|
74
|
+
- [x] `app.spawn(asyncio.to_thread(...))` for non-blocking background jobs
|
|
75
|
+
- [x] Sync example: `disk_usage_flat_viewer.py`
|
|
76
|
+
- [x] Async example: `disk_usage_flat_async.py` (`app.run_async()` + `app.spawn()`)
|
|
77
|
+
- [x] `@app.job(name)` — register async callbacks as @app decorators
|
|
78
|
+
|
|
79
|
+
### Declarative components
|
|
80
|
+
|
|
81
|
+
- [ ] `@app.component` decorator (React-like reuse, replacing `Layout`)
|
|
82
|
+
- [ ] State type definitions and validation (no Pydantic)
|
|
83
|
+
|
|
84
|
+
### Testing
|
|
85
|
+
|
|
86
|
+
- [x] Headless execution tests (`tests/` — withdrawn root, build/apply_state/callback drive)
|
|
87
|
+
- [ ] WidgetSpec unit tests
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "nextpytk"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.3.0"
|
|
8
8
|
description = "Flask-style decorator API for tkinter GUI: schema-driven, A11y-first, agent-compatible."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13"
|
|
@@ -13,7 +13,7 @@ authors = [{ name = "Takuya Nishimoto" }]
|
|
|
13
13
|
dependencies = []
|
|
14
14
|
|
|
15
15
|
[project.urls]
|
|
16
|
-
Homepage = "https://github.com/nishimotz/
|
|
16
|
+
Homepage = "https://github.com/nishimotz/nextpytk"
|
|
17
17
|
|
|
18
18
|
[tool.hatch.build.targets.wheel]
|
|
19
19
|
packages = ["src/nextpytk"]
|
|
@@ -27,4 +27,8 @@ package = true
|
|
|
27
27
|
[dependency-groups]
|
|
28
28
|
dev = [
|
|
29
29
|
"pyright>=1.1.409",
|
|
30
|
+
"pytest>=8.0",
|
|
30
31
|
]
|
|
32
|
+
|
|
33
|
+
[tool.pytest.ini_options]
|
|
34
|
+
testpaths = ["tests"]
|