Windows-only Python SDK for rendering JSON Schema forms in WebView2
Project description
XBot Form
Windows-only Python SDK for rendering JSON Schema forms in WebView2.
Features
- 🎨 JSON Schema Forms - Render dynamic forms from JSON Schema definitions
- 🖥️ Native Windows UI - Uses WebView2 for modern, native-feeling interfaces
- 🎯 Type-Safe API - Configuration classes with IDE autocompletion support
- 🔗 Fluent Builder - Chainable API for easy form configuration
- 🌙 Theme Support - Light and dark mode themes
- 🪟 Frameless Windows - Optional borderless windows with rounded corners
Installation
pip install xbot-form
Requirements:
- Windows 10/11
- Python 3.8+
- WebView2 Runtime (usually pre-installed on Windows 10/11)
Quick Start
Basic Usage
from xbot_form import show_form
# Window title is automatically extracted from schema["title"]
schema = {
"type": "object",
"title": "User Registration", # <- This becomes the window title
"properties": {
"name": {"type": "string", "title": "Name"},
"email": {"type": "string", "title": "Email", "format": "email"},
},
"required": ["name", "email"]
}
result = show_form(schema=schema)
print(f"User submitted: {result}")
# Or override with explicit title parameter
result = show_form(schema=schema, title="Custom Window Title")
Builder Pattern (Recommended)
from xbot_form import form_builder, FormCancelledError
try:
result = (
form_builder()
.schema({
"type": "object",
"properties": {
"username": {"type": "string", "title": "Username"},
"password": {"type": "string", "title": "Password"},
}
})
.ui_schema({
"password": {"ui:widget": "password"}
})
.title("Login")
.size(600, 400)
.frameless(corner_radius=16)
.theme("dark")
.show()
)
print(f"Login: {result}")
except FormCancelledError:
print("Login cancelled")
Configuration Classes
from xbot_form import (
show_form_with_config,
FormConfig,
WindowOptions,
DisplayOptions,
FormCancelledError
)
config = FormConfig(
schema={
"type": "object",
"properties": {
"task": {"type": "string", "title": "Task Name"},
"priority": {
"type": "string",
"title": "Priority",
"enum": ["Low", "Medium", "High"]
}
}
},
window=WindowOptions(
width=800,
height=600,
title="New Task",
frameless=True,
corner_radius=12
),
display=DisplayOptions(
theme="light",
debug=False
)
)
try:
result = show_form_with_config(config)
print(f"Task created: {result}")
except FormCancelledError:
print("Cancelled")
API Reference
Functions
| Function | Description |
|---|---|
show_form(...) |
Display a form with individual parameters |
show_form_with_config(config) |
Display a form using FormConfig object |
form_builder() |
Create a FormBuilder for fluent configuration |
Configuration Classes
| Class | Description |
|---|---|
FormConfig |
Complete form configuration |
FormSchema |
JSON Schema with optional UI schema |
WindowOptions |
Window size, title, frameless settings |
DisplayOptions |
Theme, debug mode, locale settings |
FormBuilder |
Fluent builder for form configuration |
Exceptions
| Exception | Description |
|---|---|
XBotFormError |
Base exception for all SDK errors |
FormCancelledError |
User cancelled or closed the form |
FormTimeoutError |
Form display timed out |
WebViewError |
WebView2 initialization error |
WebViewNotAvailableError |
WebView2 runtime not installed |
WindowError |
Window creation error |
Parameters
show_form()
| Parameter | Type | Default | Description |
|---|---|---|---|
schema |
dict |
None |
JSON Schema for the form (supports title for window title) |
title |
str |
None |
Window title. Priority: title > schema["title"] > "应用配置" |
width |
int |
1000 |
Window width in pixels |
height |
int |
800 |
Window height in pixels |
frameless |
bool |
True |
Borderless window mode |
corner_radius |
int |
32 |
Corner radius for frameless windows |
debug |
bool |
False |
Enable DevTools |
theme |
str |
"light" |
Color theme ("light" or "dark") |
License
MIT License - see LICENSE for details.
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
xbot_form-0.2.7.tar.gz
(356.0 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
xbot_form-0.2.7-py3-none-any.whl
(363.0 kB
view details)
File details
Details for the file xbot_form-0.2.7.tar.gz.
File metadata
- Download URL: xbot_form-0.2.7.tar.gz
- Upload date:
- Size: 356.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.13.2 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9cbaa72567ccc099c8b2af4d04c688b63ae7bc9633a0098b0e4c696db02b6ed1
|
|
| MD5 |
ca3ed10e67e3af124715234b08015cb7
|
|
| BLAKE2b-256 |
f95678e695bcda22da3c30419455271f384d156d583df85e3ae1080e078363f2
|
File details
Details for the file xbot_form-0.2.7-py3-none-any.whl.
File metadata
- Download URL: xbot_form-0.2.7-py3-none-any.whl
- Upload date:
- Size: 363.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.13.2 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec9002324cebbf3db6f3072996154a12c55f416fe37efd85351a01f5ef27663e
|
|
| MD5 |
04c8672139935afd5c438f79426a9de1
|
|
| BLAKE2b-256 |
6faaaa405621576d37b07e7df702a569d45074ac48853e997b7c229c31bb00b8
|