!!! warning "Pre-2.0 layout"
This page describes the pre-2.0 flat main.py layout. As of 2.0.0 the library is the
programver package (VersionDialog, programver/dialog.py) and main.py is a demo,
not the module itself — see Known Issues for what changed and
the README for current usage. This
page is pending a rewrite for 2.0.
The file is not in the repository, and the code needs it before the window can appear. Supply
your own logo at imgs/dfdlogo.gif — GIF or PNG.
Recorded in internal/known-issues.md. MANIFEST.in lists it, so
it is expected to exist.
The Open License and Open EULA buttons read those exact filenames. Neither is in the
repository. Add them as plain text, or edit openLicense and openEULA to point at files you
have — the repository's own licence is LICENSE.md.
The image is not a GIF or PNG. Tkinter reads nothing else without Pillow.
Tkinter keeps no Python reference to a PhotoImage. In the current code they survive because
ProgramVer() blocks in mainloop() and they stay in scope. If you refactor it to return the
window, bind each image to a widget attribute (label.image = img) or they will vanish silently.
A separate package on most Linux distributions:
sudo apt install python3-tk # Debian, Ubuntu
sudo dnf install python3-tkinter # FedoraopenLicense and openEULA each construct a second Tk() root rather than a Toplevel().
Multiple roots share one interpreter, so destroying the wrong one can take the others down. See
Architecture.
They are placeholder literals in main.py — the shipped text names a different company and a
2024 date. Configuration names each by symbol.
The console script itself is wired correctly (main:ProgramVer, which does call mainloop()),
but it fails on the missing image like any other route. The packaging also declares imgs/ as
the package root, which is wrong but harmless — only py_modules=["main"] ships code. See
internal/known-issues.md.
docs/CUSTOMIZATION.md located each editable string by line number, and the file has changed
since. Configuration names symbols instead.
Expected, and the point of the Testing page: the suite mocks the filesystem as well as the display.
Open an issue or ask on the Discord, with your OS, Python version, and the traceback.