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.
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextpytk
3
- Version: 0.2.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/tk-outer
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.2.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/tk-outer"
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"]