PyDeskUI
Professional tkinter/ttk components for Python 3.13+ and Tcl/Tk 9, with zero third-party runtime dependencies. Version 0.2.0 uses Tk 9's native SVG reader for scalable icons and compact control surfaces.
Desktop studio
| Light | Dark |
|---|---|
The gallery includes the complete component collection, three desktop scenes,
and a live theme editor. From a repository checkout, run
python examples/gallery.py to explore it. The gallery is a demonstration, not
a complete API or platform/accessibility test.
Installation
Install PyDeskUI from PyPI:
python -m pip install pydeskui
Check that Python is 3.13 or newer and is linked to Tk 9:
python -c "import tkinter as tk; r=tk.Tk(); print(r.tk.call('info','patchlevel')); r.destroy()"
Tk 8.6 is rejected when a Theme or component is created. A virtual environment inherits Tcl/Tk from its base interpreter; installing PyDeskUI cannot replace it.
Quick start
import tkinter as tk
from pydeskui import Button, Card, Entry, Label, Theme
root = tk.Tk()
theme = Theme(root, radius=6, density="default", font_size=13)
panel = Card(root, theme=theme)
panel.pack(fill="both", expand=True, padx=16, pady=16)
Label(panel, text="Project name", theme=theme).pack(anchor="w")
value = tk.StringVar(master=root, value="Hello")
Entry(panel, textvariable=value, placeholder="Untitled", theme=theme).pack(fill="x")
Button(panel, text="Clear", variant="secondary", theme=theme,
command=lambda: value.set("")).pack(anchor="e", pady=8)
root.mainloop()
The caller owns the parent, domain state and event loop. All GUI operations run on the Tk thread. Importing the library never creates a root. Themes use scoped styles; widget destruction cancels owned work and retains caller variables.
The pydeskui.widgets export surface contains 39 components (excluding data
helpers and contexts):
| Group | Components |
|---|---|
| Existing controls and views | Button, Entry, SearchEntry, SegmentedControl, ItemList, DetailView, Form, ProgressView, Dialog |
| Structure and data | Frame, Label, Card, Separator, Badge, Icon, Sidebar, Toolbar, Tabs, SplitPane, ScrollArea, Table, Tree |
| Additional inputs | Textarea, Checkbox, RadioGroup, Switch, Select, Combobox, Slider, Spinbox |
| Overlays and feedback | Tooltip, Popover, DropdownMenu, ContextMenu, Alert, Toast, EmptyState, Skeleton, Sheet |
Themes default to keyboard-aware focus rings: pointer interaction stays visually
quiet while Tab and arrow-key navigation remains visible. Set focus_ring to
"always" or "never" when an application needs an explicit policy.
Supporting APIs include Item, FieldSpec, Theme, TranslationContext, Scheduler,
CancelHandle, check_runtime, load_image, load_svg and
UnsupportedTkVersionError. Tk 9 loads SVG, PNG and GIF directly. Bundled icons
are SVG source assets and are rendered at the active logical size.
Documentation
See the design system, appearance decision, implemented API, migration guide, design documents, and agent skill.
Contributing
Development setup, testing, and release checks are documented in the contribution guide.
Support
If PyDeskUI is useful to you, you can support its development on Buy Me a Coffee.
Metadata
Release files for pydeskui 0.2.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 | Provenance | |
|---|---|---|---|---|
| pydeskui-0.2.3.tar.gz | 567.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pydeskui-0.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 633.0 kB
Release files / pydeskui-0.2.3.tar.gz
| Download URL | pydeskui-0.2.3.tar.gz |
|---|---|
| Size | 567.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b0f87011618151c1726bf35d6db4ced08d391afb9cbf3f8a91c7a8d6401f6bf5
|
|
BLAKE2b-256 checksum How to use checksums |
01406c13ff7d15eb4a2c6ed5fcc04a30aa970eb7a39403c283dabdd6f20dcbd4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.12
|
Release files / pydeskui-0.2.3-py3-none-any.whl
| Download URL | pydeskui-0.2.3-py3-none-any.whl |
|---|---|
| Size | 65.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5a59da04b0a04e6cf4d558149c0f69fba12bd70ed0b4486912e717a6cb032497
|
|
BLAKE2b-256 checksum How to use checksums |
a8c9ba86ddb91818f63257c15df77eac7b60a98ffd31ae84a09b550515cee2b6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.12
|
Security for pydeskui 0.2.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.