Repository navigation
Releases: nbro/tktable
Release list
0.3.0
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
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
First release on PyPI, as pytktable. Install Tktable separately: see the installation instructions.
What's new compared with the 2023 version
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 inpyproject.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).
Earlier work (2023)
- Packaging with
pyproject.tomland Poetry instead ofsetup.py(#8). - Code formatted with black and isort (#9).
- Python 2 support removed (#19).
- Code cleaned up with pylint, and the example moved to
examples/(#20). tktable.pysplit into thetktablepackage, withTableandArrayVarin their own modules (#22).- A clear error,
CannotUseError, when Tktable is missing (#23). - Python version support and classifiers updated (#24), and the maintainer's email (#26).
History
The wrapper was originally written by Guilherme Polo in 2008. The repository's history from 2015 to 2017, before it was restructured, is in the master_01_09_2017 branch.