Skip to main content

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
PyDeskUI desktop studio in light mode PyDeskUI desktop studio in dark mode

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)

Source distribution for pydeskui 0.2.3
File Size Uploaded Provenance
pydeskui-0.2.3.tar.gz 567.1 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pydeskui 0.2.3
File Interpreter ABI Platform
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page