Private
Public Access
0
0
Commit Graph

1 Commits

Author SHA1 Message Date
ed 21aaf31032 fix(gui_2): graceful fallback when tkinter.filedialog is unloadable
Bug: on Python installs where the tkinter package imports but the
filedialog sub-module fails to load (e.g., missing Tcl/Tk runtime,
embedded Python), every call to filedialog.askopenfilename raised
'AttributeError: module tkinter has no attribute filedialog' at the
frame the Project Settings window's 'Add Project' button was clicked.

Fix: _LazyModule._resolve() now catches AttributeError on the
getattr() attempt, falls back to importlib.import_module('tkinter.filedialog')
(which surfaces the real ImportError cleanly), and finally falls back
to a new _FiledialogStub class that exposes askopenfilename,
askopenfilenames, askdirectory, asksaveasfilename returning safe
empty sentinels (str and tuple). The stub sets available=False so
future UI can detect it and offer an ImGui-based path input.

Tests:
- tests/test_lazymodule_filedialog_fallback.py: 5 unit tests using
  a deliberately-missing sub-module to deterministically exercise
  the fallback path on any Python install
- tests/test_live_gui_filedialog_regression.py: live_gui smoke test
  that opens the Project Settings window via the Hook API and
  asserts no AttributeError in the running app's log
2026-06-07 02:02:41 -04:00