Source code for tktable.__main__
"""Diagnose whether Tktable can be used: ``python -m tktable``.
Exits with status 0 if Tktable can be found (and loaded, when a display is available),
and 1 otherwise.
"""
import os
import platform
import sys
[docs]
def main() -> int:
"""Print diagnostic information and return the exit status."""
print(f"Python: {sys.version.split()[0]} ({platform.platform()})")
try:
import tkinter # pylint: disable=import-outside-toplevel
except ImportError as exc:
print(f"tkinter: NOT AVAILABLE ({exc})")
print("Install tkinter for your Python (e.g. `sudo apt install python3-tk`).")
return 1
# pylint: disable-next=import-outside-toplevel
from tktable.utils import TKTABLE_LIBRARY_ENV_VAR, find_tktable, load_tktable
try:
interp = tkinter.Tcl() # Tcl only: no window, so no display needed.
except tkinter.TclError as exc:
print(f"Tcl: NOT AVAILABLE ({exc})")
return 1
print(f"Tcl: {interp.call('info', 'patchlevel')}")
print(f"{TKTABLE_LIBRARY_ENV_VAR}: {os.environ.get(TKTABLE_LIBRARY_ENV_VAR, '(not set)')}")
versions = find_tktable(interp)
# One folder per line, as plain text (Tcl 9 returns them as "path objects").
print("auto_path:")
for folder in interp.tk.splitlist(interp.call("set", "auto_path")):
print(f" {folder}")
if not versions:
print("Tktable: NOT FOUND")
print("See https://nbro.github.io/tktable/installation/")
return 1
print(f"Tktable: found version(s) {', '.join(versions)}")
try:
root = tkinter.Tk()
except tkinter.TclError as exc:
print(f"Tk: cannot start ({exc}); skipped loading Tktable")
return 0
try:
root.withdraw()
print(f"Tk: {root.call('info', 'patchlevel')}")
print(f"Tktable: loaded version {load_tktable(root)}")
except tkinter.TclError as exc:
print(f"Tktable: FOUND BUT FAILED TO LOAD ({exc})")
print("It may have been built for a different Tcl/Tk version than your Python uses.")
return 1
finally:
root.destroy()
return 0
if __name__ == "__main__":
sys.exit(main())