pyoxidizer 0.24.0

Package self-contained Python applications
Documentation
.. py:currentmodule:: starlark_pyoxidizer

.. _packaging_tkinter:

===================================
Using the ``tkinter`` Python Module
===================================

The `tkinter <https://docs.python.org/3/library/tkinter.html>`_ Python
standard library module/package provides a Python interface to
tcl/tk/tkinter. This interface allows you to create GUI applications.

PyOxidizer has partial support for using ``tkinter``. Since ``tkinter``
isn't a commonly used Python feature, you must opt in to enabling it.

.. _packaging_installing_tcl_files:

Installing tcl Files
====================

``tkinter`` requires both a Python extension module compiled against
tcl/tk and tcl support files to be loaded at run-time.

All the
:ref:`built-in Python distributions <packaging_available_python_distributions>`
shipping with PyOxidizer provide ``tkinter`` support with the exception of the
Windows ``standalone_static`` distributions.

However, the tcl support files aren't installed by default.

To install tcl support files, you will need to set the
:py:attr:`PythonExecutable.tcl_files_path` attribute of a
:py:class:`PythonExecutable` instance to the directory you
want to install these files into. e.g.

.. code-block:: python

   def make_exe(dist):
       exe = dist.to_python_executable(name="myapp")
       exe.tcl_files_path = "lib"

       return exe

When ``tcl_files_path`` is set to a non-``None`` value, the tcl files
required by ``tkinter`` are installed in that directory and the built
executable will automatically set the ``TCL_LIBRARY`` environment variable
at run-time so the tcl interpreter uses those files.

.. _packaging_tcl_files_self_contained:

tcl Files Prevent Self-Contained Executables
============================================

The tcl interpreter needs to load various files off the filesystem
at run-time. PyOxidizer does not (yet) support embedding these files in
the binary and loading them from memory or extracting them at run-time.

So if you need to use ``tkinter``, you cannot have a single-file executable
that works without a dependency on tcl files elsewhere on the filesystem.