Skip to main content

A custom dialog component for CustomTkinter

Project description

๐ŸŽ‰ CustomCTkDialog

Beautiful dialogs, alerts, and native file pickers for CustomTkinter โ€” powered by a lightweight Electron executable.

โœจ Features

โœ”๏ธ Modern dialogs that blend perfectly with CustomTkinter โœ”๏ธ Custom alert boxes with multiple alert types โœ”๏ธ Native-feeling folder picker powered by a lightweight Electron executable โœ”๏ธ Plug-and-play โ€” no configuration required โœ”๏ธ Clean, Pythonic API โœ”๏ธ Automatic runtime download โ€” no large .exe included in the package

๐Ÿš€ Installation

pip install customctkdialog

๐Ÿ“ฆ Project Structure

CustomCTkDialog/
โ”‚
โ”œโ”€โ”€ CustomCTkDialog/              # Python package
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ electron_loader.py        # Downloads Electron runtime on import
โ”‚   โ”œโ”€โ”€ dialog_main.py            # Main dialog system
โ”‚
โ”œโ”€โ”€ js-folder-picker/             # JS workspace (developers only)
โ”‚   โ”œโ”€โ”€ folder-picker.js
โ”‚   โ”œโ”€โ”€ package.json
โ”‚   โ””โ”€โ”€ build scripts
โ”‚
โ”œโ”€โ”€ example/
โ”‚   โ””โ”€โ”€ app.py                    # Example usage
โ”‚
โ”œโ”€โ”€ images/                       # UI preview images
โ”‚   โ”œโ”€โ”€ prompt.png
โ”‚   โ”œโ”€โ”€ confirm.png
โ”‚   โ””โ”€โ”€ alert.png
โ”‚
โ”œโ”€โ”€ README.md
โ””โ”€โ”€ pyproject.toml

๐Ÿ“ Note: The js-folder-picker/ folder is not included in the published Python package.

๐Ÿ”„ Runtime Logic with electron_loader

Previously, the Python package included a large bundled .exe, which made installation heavy and slow.

CustomCTkDialog now uses a dynamic runtime loader:

  1. On package import, electron_loader.ensure_electron() runs automatically.
  2. It checks whether the Electron folder picker runtime is already present.
  3. If missing, the user is prompted:
Some necessary files are required for CustomCTkDialog.folder_picker to work.
Download these files now? (Y/n):
  1. If the user agrees, the ZIP is downloaded from GitHub Releases.
  2. The ZIP is extracted into the package directory.
  3. Future imports detect the runtime and do not download again.

โœ”๏ธ Benefits

  • Very lightweight PyPI package
  • Automatic runtime management
  • Easy to release updates via GitHub

๐Ÿงช Example Usage

Here are the UI components included in the package:

confirm alert prompt

from CustomCTkDialog import Dialog, folder_picker, file_picker, AlertType

# Prompt input
try:
    name = Dialog.prompt("Enter your name:", default_text="Alice")
    print("Prompt returned:", name)
except ValueError as error:
    print("Prompt canceled:", error)

# Confirm dialog
confirmed = Dialog.confirm("Do you want to continue?")
print("Confirm returned:", confirmed)

# Alert
Dialog.alert(AlertType.SUCCESS, "Test Alert", "This is a success alert!")

# File picker
files = file_picker(initialdir="D:/")
print("Selected files:", files)

# Folder picker (Electron runtime downloads automatically on first run)
directories = folder_picker(initialdir="D:/")
print("Selected folders:", directories)

๐Ÿงฐ API Reference

Dialog class

Method Description
prompt() Shows an input dialog, returns string or raises ValueError.
confirm() Shows a yes/no dialog, returns boolean.
alert() Shows an alert with the specified AlertType.

folder_picker()

paths = folder_picker()

file_picker()

files = file_picker()

๐Ÿ›  Development

Install dependencies

pip install -r requirements.txt

Run example

python example/app.py

Rebuild JS folder picker

cd js-folder-picker
npm install
npm run build

Upload the resulting ZIP to GitHub Releases.

๐Ÿ“ฆ Build & Publish (maintainers only)

Build

python -m build --no-isolation

Upload to TestPyPI

python -m twine upload --verbose --repository testpypi dist/*

๐Ÿ”’ TestPyPI & PyPI Upload Permissions

To protect users and maintain high-quality releases, upload permissions for both TestPyPI and PyPI are limited to the project owner and approved maintainers.

This ensures:

  • Secure, trusted releases
  • Proper version control
  • A consistent publishing workflow

Want to become a maintainer?

  1. Open an issue on GitHub expressing your interest.
  2. Contact the project owner.
  3. Once approved, your account will be added under Settings โ†’ Collaborators, enabling you to publish updates.

Your contributions are valued โ€” thank you for helping improve the project!

๐Ÿค Contributing

  • Pull requests welcome!
  • JS improvements must be rebuilt before packaging.
  • Release updates through GitHub to support the runtime downloader.

๐Ÿ“ License

Creative Commons Attributionโ€“NonCommercial 4.0 (CC BY-NC 4.0)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

customctkdialog-0.2.6.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

customctkdialog-0.2.6-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file customctkdialog-0.2.6.tar.gz.

File metadata

  • Download URL: customctkdialog-0.2.6.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.0

File hashes

Hashes for customctkdialog-0.2.6.tar.gz
Algorithm Hash digest
SHA256 d6f30b0602277c008569cc3519737727c6f20e5f15170582a2736ef998ee77d9
MD5 249726e76ba6d0f743d91c1f7f5018e4
BLAKE2b-256 9d3b8dd1d45b4655b7063bbf0db0ed5bdb125141427338664739a8dde85ca0ed

See more details on using hashes here.

File details

Details for the file customctkdialog-0.2.6-py3-none-any.whl.

File metadata

File hashes

Hashes for customctkdialog-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 65448a8a6dccada68b9c5713a8f6513a590a1d1e83236d7d13dcdad69055565f
MD5 a41edfc46622c7c2f60289cab91d6b9c
BLAKE2b-256 c553c4bafb6aaf5b5b4e74c2308e78bd393ca7bb7085123675b0c55fdffb32a2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page