Version 3.14

guidata Version 3.14.2

🛠️ Bug fixes:

  • Old QtPy compatibility: Fixed ImportError when using QtPy < 2.0.0 (guidata supports QtPy >= 1.9) — the PYSIDE6 constant was not available before QtPy 2.0.0

  • MultipleChoiceItem validation: Fixed DataItemValidationError when accepting a dialog containing a MultipleChoiceItem with validation enabled — the widget was passing a list instead of the expected tuple, causing a validation failure when closing the dialog (fixes Issue #98)

  • PyQt6 compatibility: Fixed RuntimeError: wrapped C/C++ object has been deleted when closing dialogs in automated tests with PyQt6 — exec_dialog() now checks object validity before calling deleteLater(), since Qt may already have destroyed the C++ object during exec()

guidata Version 3.14.1

  • Added official support for Python 3.14

🛠️ Bug fixes:

  • PySide6 compatibility: Added is_qobject_valid() utility function to safely check if a QObject’s underlying C++ object is still valid

    • With PySide6, accessing methods on a deleted C++ object causes a segfault instead of raising RuntimeError (as PyQt does)

    • Uses shiboken.isValid() on PySide2/PySide6 and objectName() try/except on PyQt5/PyQt6

    • Updated close_widgets_and_quit() to use is_qobject_valid() instead of a bare try/except for widget validity checks

    • Updated close_dialog_and_quit() to check widget validity before and after processEvents(), preventing segfaults when Qt deletes widgets during event processing

♻️ Code improvements:

  • Refactored refresh action lambda in IconBrowserWindow for improved readability

  • Simplified widget name retrieval in close_widgets_and_quit() function

guidata Version 3.14.0

✨ New features:

  • Jupyter notebook HTML representation: Added rich HTML display support for DataSet and LabeledEnum objects

    • New _repr_html_() method on DataSet class for styled HTML table rendering in Jupyter notebooks

    • New _repr_html_() method on LabeledEnum class for formatted display of enum values with labels

    • CSS styling with .guidata-dataset-table class for consistent visual appearance

    • Automatically called by Jupyter when displaying objects as cell output

    • HTML representation now includes attribute names in a third column for easier programmatic access

  • Interactive Python experience: Improved DataSet representation in Python interpreters

    • New __repr__() method on DataSet class shows attribute names instead of labels

    • Makes it easy to discover attribute names when working interactively in a Python shell or notebook

    • print(dataset) still shows user-friendly labels, while repr(dataset) or just typing the variable shows attribute names

  • Secure build utility: Added --prebuild option to run commands before package build

    • New --prebuild command-line argument for guidata.utils.securebuild

    • Executes custom commands in the temporary build directory before python -m build

    • Useful for compiling translations or other pre-build tasks in the clean clone environment

    • Automatically replaces python with the current interpreter to avoid PATH issues on Windows

    • Converts relative PYTHONPATH entries to absolute paths for correct module resolution

    • Usage: python -m guidata.utils.securebuild --prebuild "python -m guidata.utils.translations compile --name myapp --directory ."

  • New cleanup-doc command for Sphinx documentation translation files

    • Added cleanup_doc_translations() function to clean up .po files in doc/locale/ directories

    • Removes POT-Creation-Date and Last-Translator headers from all Sphinx-generated translation files

    • Usage: python -m guidata.utils.translations cleanup-doc --directory .

    • Helps avoid merge conflicts when cherry-picking commits between branches (e.g., releasedevelop)

    • Optional --locale-dir argument to specify custom locale directory path (defaults to doc/locale)

  • Translation file generation: Ignore POT-Creation-Date and Last-Translator headers to reduce unnecessary diffs

    • Added _cleanup_po_file() helper function to remove the POT-Creation-Date and Last-Translator headers from generated .po files

    • This prevents spurious diffs in version control when regeneration occurs at different times

    • Integrated cleanup step into generate_translation_files() after .po file creation

    • Ensures cleaner translation file management and reduces noise in commit history

  • Icon Browser utility: Added a new GUI tool for browsing and exploring icon collections

    • New guidata.widgets.iconbrowser module with IconBrowserWindow widget

    • Command-line tool: giconbrowser [folder] or python -m guidata.widgets.iconbrowser [folder]

    • Features a split-pane interface with tree view for folder navigation and icon grid display

    • Tree view shows folder hierarchy with open/closed folder icons and file counts

    • Single-click on icons opens file location in system file explorer (Windows/macOS/Linux)

    • Adjustable thumbnail sizes (16-256 pixels) via toolbar

    • Supports PNG, SVG, ICO, JPG, GIF, and BMP formats

    • Responsive grid layout adapts to window resizing

    • Useful for developers managing icons for their applications and libraries

    • Refresh action to toolbar for reloading current folder after external changes

  • Cleanup utility enhancements: Improved the guidata.utils.cleanup module

    • Added case sensitivity option for glob patterns (default: case-insensitive matching)

    • Improved module name detection from pyproject.toml when name differs from directory name

    • Enhanced documentation cleanup to support removing PDF files with library name prefix

    • These improvements make the cleanup utility more robust and flexible for different project structures