Changelog¶
All notable changes to this project are documented here. The format is based on Keep a Changelog, and the project uses Semantic Versioning.
Unreleased¶
0.3.0 - 2026-11-04¶
Added¶
pip install "pytktable[binary]"also installs Tktable, prebuilt for Linux, macOS and Windows (pytktable-binaries). pytktable finds it automatically, without installing Tktable or settingTKTABLE_LIBRARY.
Changed¶
The installation docs recommend
pip install "pytktable[binary]", and keep the instructions to install Tktable yourself for platforms without prebuilt Tktable, or if you prefer your OS’s.
0.2.0 - 2026-11-04¶
Added¶
Type hints on the whole library, checked by mypy, and a
py.typedmarker so your type checker and IDE use them (#21). Callbacks receive a documentedTableEvent.Windows installation docs: install Tktable with Magicsplat Tcl/Tk and set
TKTABLE_LIBRARY, tested in CI with Python 3.11 to 3.15 (Tcl 8.6 and 9.0). Covers winget (Tcl 8.6), Chocolatey (Tcl 8.6 and 9.0) and Magicsplat’s installer.A screenshot of the example, and a list of features, in the README and the docs.
A warning at the top of the README and the docs that Tktable must be installed separately.
One small example per feature (e.g.
examples/tags.py), each describing itself in its window, listed in the docs, and a test that runs every example in CI.
Changed¶
The library only uses tkinter’s public API, instead of private helpers (
_w,_register,_flatten, …) that may change between Python versions.The
tags.pyexample explains tag priority correctly (the tag created first wins) and shows how to style a single title cell withtag_raise()(#5). A newflash.pyexample shows the red flash on changed cells (flashmode) and how to restyle or avoid it (#5).The examples are run as modules from the repository’s root, e.g.
poetry run python -m examples.planets, and share their window setup (examples/window.py).The example shows real data, the 8 planets from NASA’s Planetary Fact Sheet, saved in
examples/data/planets.json(refresh it withpoetry run poe update_example_data). It is an editable table with a modern look: larger fonts, the native ttk theme, sharp text on high-DPI Windows screens, and the window centered on screen, never smaller than its contents, with the table growing with the window. Editing works like a spreadsheet: Left/Right move within the cell, Tab/Shift+Tab move between cells, Enter moves down, and clicking puts the cursor where you click.python -m tktableprints Tcl’sauto_pathas one plain folder per line.
0.1.0 - 2026-11-03¶
First release on PyPI. These changes were made with the help of Claude (Anthropic), and reviewed by the maintainer.
Fixed¶
Tablecrashed on Python >= 3.10 when given any callback option (e.g.command,browsecmd), becausecollections.Callablewas removed in Python 3.10. It now usescallable().ArrayVar.unset()without a pattern passedNoneto Tcl instead of unsetting all elements.ArrayVar.get()(without a key) failed withTypeErroron modern Python/tkinter, which returns Tcl lists asTcl_Obj;ArrayVar.names()could return aTcl_Objfor the same reason.Table.tag_lower()did not pass the tag name to Tcl, so it always failed.Table.height(0)returned the heights of all rows instead of the height of row 0.
Added¶
python -m tktable: diagnoses whether tkinter, Tcl/Tk and Tktable can be found and loaded, and prints the Tcl version,TKTABLE_LIBRARYand Tcl’sauto_path. It works without a display (e.g. in CI) and without tkinter installed.Documentation (Sphinx + Markdown), published to GitHub Pages: installation per OS, usage, API reference (one page per module), development and releasing.
Tests (pytest) for
ArrayVar,Table,tktable.utilsand the diagnostic. Tests that need Tktable are skipped when it is missing, or fail ifTKTABLE_REQUIRED=1.Development commands (set up, format, check, test, docs, …) as Poe the Poet tasks in
pyproject.toml, the same on Linux, macOS and Windows. Runpoetry run poeto list them.GitHub Actions workflows:
tests on Linux, macOS and Windows with Python 3.11 to 3.15, plus quality checks;
tests in Debian and Ubuntu containers using their Tktable packages;
an experimental job testing Magicsplat’s Tktable with python.org’s Python on Windows;
release to PyPI (Trusted Publishing) and GitHub when a version tag is pushed.
Dockerfiles (
docker/) to run the tests with each Linux distro’s own packages, and docs on running the example in the Ubuntu container on Windows (WSLg) and Linux, without installing Tktable.pre-commit hooks that run all quality checks on every commit (install them with
poetry run pre-commit install): the Poe check tasks (lock file, isort, black, mypy, pylint), YAML linting (yamllint), secret scanning (gitleaks) and security checks (bandit).AGENTS.md: code style and workflow guidelines for contributors and AI agents.README: badges, short description and installation, pointing to the documentation.
Changed¶
Published on PyPI as
pytktable, becausetktableis taken by an unrelated project. The import name is stilltktable.Requires Python >= 3.11.
pyproject.tomluses the standard[project]table (Poetry 2); dev dependencies updated.CannotUseErrornow tells users to runpython -m tktableand links to the README.Loading Tktable (including
TKTABLE_LIBRARYsupport) moved totktable.utils, shared byTableand the diagnostic.The library logs at
DEBUGlevel instead ofINFO; the example logs instead of printing.tktable/__init__.pyimportsArrayVarandTablelazily, so the diagnostic works without tkinter (explained in the module docstring).