Skip to content

0.1.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 21:14
· 32 commits to main since this release

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

  • Table crashed on Python >= 3.10 when given any callback option (e.g. command,
    browsecmd), because collections.Callable was removed in Python 3.10.
    It now uses callable().
  • ArrayVar.unset() without a pattern passed None to Tcl instead of unsetting all
    elements.
  • ArrayVar.get() (without a key) failed with TypeError on modern Python/tkinter, which
    returns Tcl lists as Tcl_Obj; ArrayVar.names() could return a Tcl_Obj for 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_LIBRARY and Tcl's auto_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.utils and the diagnostic. Tests that need Tktable are
    skipped when it is missing, or fail if TKTABLE_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. Run poetry run poe to 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, because tktable is taken by an unrelated project.
    The import name is still tktable.
  • Requires Python >= 3.11.
  • pyproject.toml uses the standard [project] table (Poetry 2); dev dependencies
    updated.
  • CannotUseError now tells users to run python -m tktable and links to the README.
  • Loading Tktable (including TKTABLE_LIBRARY support) moved to tktable.utils, shared
    by Table and the diagnostic.
  • The library logs at DEBUG level instead of INFO; the example logs instead of printing.
  • tktable/__init__.py imports ArrayVar and Table lazily, so the diagnostic works
    without tkinter (explained in the module docstring).

Earlier work (2023)

  • Packaging with pyproject.toml and Poetry instead of setup.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.py split into the tktable package, with Table and ArrayVar in 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.