Skip to content

PDS4 Viewer exceptions on Python 3.13+ due to removed trace methods in Tcl/Tk 9.0+ #136

@jstone-psi

Description

@jstone-psi

When I try to run the pds4viewer gui with a fresh install using pip on python 3.13.7, I get the following error.

I tracked this down, and it looks like the PDS4 viewer is using deprecated tkinter functions that have finally been removed from python3.

https://docs.python.org/3/whatsnew/3.6.html

I could not find the specifc version where it was finally removed, however.

Traceback (most recent call last):
  File "/Users/jessestone/Desktop/pds4viewer/wrapper.py", line 5, in <module>
    pds4_tools.view()
    ~~~~~~~~~~~~~~~^^
  File "/Users/jessestone/Desktop/pds4viewer/venv/lib/python3.13/site-packages/pds4_tools/viewer/core.py", line 1159, in pds4_viewer
    open_summary(viewer, filename=filename, from_existing_structures=from_existing_structures,
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                 quiet=quiet, lazy_load=lazy_load)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jessestone/Desktop/pds4viewer/venv/lib/python3.13/site-packages/pds4_tools/viewer/summary_view.py", line 1221, in open_summary
    summary_window = StructureListWindow(viewer, quiet=quiet, lazy_load=lazy_load, withdrawn=lazy_load)
  File "/Users/jessestone/Desktop/pds4viewer/venv/lib/python3.13/site-packages/pds4_tools/viewer/summary_view.py", line 58, in __init__
    self._add_menus(quiet, lazy_load, show_headers)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jessestone/Desktop/pds4viewer/venv/lib/python3.13/site-packages/pds4_tools/viewer/summary_view.py", line 549, in _add_menus
    self._add_trace(self._menu_options['quiet'], 'w', self._update_quiet, default=quiet)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jessestone/Desktop/pds4viewer/venv/lib/python3.13/site-packages/pds4_tools/viewer/core.py", line 421, in _add_trace
    trace_id = variable.trace(mode, callback)
  File "/usr/local/Cellar/python@3.13/3.13.7/Frameworks/Python.framework/Versions/3.13/lib/python3.13/tkinter/__init__.py", line 506, in trace_variable
    self._tk.call("trace", "variable", self._name, mode, cbname)
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_tkinter.TclError: bad option "variable": must be add, info, or remove

Additionally, when I try to close pds4viewer (after resolving the above issues), I get the following error, and pds4viewer does not close:

Traceback (most recent call last):
  File "/Users/jessestone/Desktop/pds4viewer/wrapper.py", line 5, in <module>
    pds4_tools.view()
    ~~~~~~~~~~~~~~~^^
  File "/Users/jessestone/Desktop/pds4viewer/venv/lib/python3.13/site-packages/pds4_tools/viewer/core.py", line 1160, in pds4_viewer
    open_summary(viewer, filename=filename, from_existing_structures=from_existing_structures,
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                 quiet=quiet, lazy_load=lazy_load)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jessestone/Desktop/pds4viewer/venv/lib/python3.13/site-packages/pds4_tools/viewer/summary_view.py", line 1221, in open_summary
    summary_window = StructureListWindow(viewer, quiet=quiet, lazy_load=lazy_load, withdrawn=lazy_load)
  File "/Users/jessestone/Desktop/pds4v1iewer/venv/lib/python3.13/site-packages/pds4_tools/viewer/summary_view.py", line 58, in __init__
    self._add_menus(quiet, lazy_load, show_headers)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jessestone/Desktop/pds4viewer/venv/lib/python3.13/site-packages/pds4_tools/viewer/summary_view.py", line 549, in _add_menus
    self._add_trace(self._menu_options['quiet'], 'write', self._update_quiet, default=quiet)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jessestone/Desktop/pds4viewer/venv/lib/python3.13/site-packages/pds4_tools/viewer/core.py", line 426, in _add_trace
    self._add_callback('close', 'remove', 'write', trace_id)
    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jessestone/Desktop/pds4viewer/venv/lib/python3.13/site-packages/pds4_tools/viewer/core.py", line 351, in _add_callback
    callback = functools.partial(func, *args, **kwargs

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions