Version 3.14¶
guidata Version 3.14.4¶
🛠️ Bug fixes:
DataSetEditGroupBox/ computed items: Fixed input field corruption when typing into aLineEditWidgetwhoseDataSetcontains other items declared viaset_computed(...)(or anydisplay.callback) — typing multiple characters in a row (e.g.52after selecting all) was silently truncated and re-interpreted between keystrokes (producing5.02instead of52, or0.0.25instead of0.25). The reactive update of computed siblings was recursively re-entering the same callback with a different exclusion target and overwriting the field the user was editing. Bug introduced in v3.13.0 (commit0af365e, “Add support for computed properties in datasets”) (fixes Issue #104)High-DPI display scaling: Enabled automatic high-DPI scaling attributes (
AA_EnableHighDpiScaling,AA_UseHighDpiPixmaps,HighDpiScaleFactorRoundingPolicy.PassThrough) beforeQApplicationcreation inqapplication()— on Qt5, UI elements were not scaled on high-DPI monitors (150%/200%/300% Windows display scaling), making text and widgets appear disproportionately small. Qt6 already enables these by default, so the calls are no-ops there. This single change resolves a large portion of visible symptoms downstream (PlotPy, PythonQwt, DataLab) (partial fix for Issue #101)CheckBoxWidgetclipping: Fixed checkbox visual clipping when the checkbox text is empty — in mixed-widget grid layouts (especially at high DPI), the checkbox’s natural height was smaller than other input widgets (QComboBox,QLineEdit), causing it to be cut off. The minimum height is now aligned to a standard input widget heightgbuildCLI command: Fixedgbuildentry point referencing amainfunction that did not exist insecurebuild.py— running thegbuildcommand after installing guidata raised anAttributeError. The argument parsing code was moved from a top-levelif __name__block into a propermain()function (fixes Issue #99)Cleanup utility (
gclean): Fixedclean_wix_installer_filesremoving git-tracked files (e.g..bmp,.wxstemplates) when their extension matched generated artefact patterns — tracked files are now excluded from glob-based removal
♻️ Internal changes:
Debug environment variable: Renamed debug environment variable from
DEBUGtoGUIDATA_DEBUGto avoid collisions with unrelated tooling or third-party conventions that also use the genericDEBUGname
guidata Version 3.14.3¶
🛠️ Bug fixes:
FilesOpenItem: FixedAttributeErrorraised when callingfrom_string(None)andTypeErrorraised when serializing an item whose value was never set —Nonevalues are now handled gracefully (empty list / empty sequence)FilesOpenItem: Replaced unsafeeval()call withast.literal_eval()when parsing list-literal strings — eliminates an arbitrary code execution risk when reading list-of-paths values from configuration files or command-line argumentsPreviewTableModel(import wizard): Fixed mutable default argument bug where multiplePreviewTableModelinstances shared the same underlying data list, causing cross-instance mutationsDockable console: Fixed floating dock widget that could not be reopened after closing — when a dock widget was closed while floating (via the window’s X button), it now automatically re-docks inside the main window when re-shown, instead of remaining hidden as a floating window
Dark mode toolbar overflow button: Fixed toolbar overflow button (the
>>chevron) being invisible in dark mode — added proper QSS styling with gradient backgrounds and hover/pressed states for theqt_toolbar_ext_button
♻️ Internal changes:
Development environment: Added
scripts/run_with_env.pyutility to run commands within multiple Python environment contexts (WinPython, venv, etc.), with.envfile support forPYTHONPATHconfigurationTranslation file cleanup: Enhanced PO file cleanup to remove additional headers (
PO-Revision-Date,Generated-By,Project-Id-Version,Report-Msgid-Bugs-To,Language-Team) that cause unnecessary diffs in version control. Also cleanup the POT template file after extraction.
guidata Version 3.14.2¶
🛠️ Bug fixes:
Old QtPy compatibility: Fixed
ImportErrorwhen using QtPy < 2.0.0 (guidata supports QtPy >= 1.9) — thePYSIDE6constant was not available before QtPy 2.0.0MultipleChoiceItem validation: Fixed
DataItemValidationErrorwhen accepting a dialog containing aMultipleChoiceItemwith 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 deletedwhen closing dialogs in automated tests with PyQt6 —exec_dialog()now checks object validity before callingdeleteLater(), since Qt may already have destroyed the C++ object duringexec()
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 aQObject’s underlying C++ object is still validWith PySide6, accessing methods on a deleted C++ object causes a segfault instead of raising
RuntimeError(as PyQt does)Uses
shiboken.isValid()on PySide2/PySide6 andobjectName()try/except on PyQt5/PyQt6Updated
close_widgets_and_quit()to useis_qobject_valid()instead of a bare try/except for widget validity checksUpdated
close_dialog_and_quit()to check widget validity before and afterprocessEvents(), preventing segfaults when Qt deletes widgets during event processing
♻️ Code improvements:
Refactored refresh action lambda in
IconBrowserWindowfor improved readabilitySimplified 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 onDataSetclass for styled HTML table rendering in Jupyter notebooksNew
_repr_html_()method onLabeledEnumclass for formatted display of enum values with labelsCSS styling with
.guidata-dataset-tableclass for consistent visual appearanceAutomatically 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 onDataSetclass shows attribute names instead of labelsMakes it easy to discover attribute names when working interactively in a Python shell or notebook
print(dataset)still shows user-friendly labels, whilerepr(dataset)or just typing the variable shows attribute names
Secure build utility: Added
--prebuildoption to run commands before package buildNew
--prebuildcommand-line argument forguidata.utils.securebuildExecutes custom commands in the temporary build directory before
python -m buildUseful for compiling translations or other pre-build tasks in the clean clone environment
Automatically replaces
pythonwith the current interpreter to avoid PATH issues on WindowsConverts 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-doccommand for Sphinx documentation translation filesAdded
cleanup_doc_translations()function to clean up.pofiles indoc/locale/directoriesRemoves
POT-Creation-DateandLast-Translatorheaders from all Sphinx-generated translation filesUsage:
python -m guidata.utils.translations cleanup-doc --directory .Helps avoid merge conflicts when cherry-picking commits between branches (e.g.,
release↔develop)Optional
--locale-dirargument to specify custom locale directory path (defaults todoc/locale)
Translation file generation: Ignore POT-Creation-Date and Last-Translator headers to reduce unnecessary diffs
Added
_cleanup_po_file()helper function to remove thePOT-Creation-DateandLast-Translatorheaders from generated.pofilesThis prevents spurious diffs in version control when regeneration occurs at different times
Integrated cleanup step into
generate_translation_files()after.pofile creationEnsures 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.iconbrowsermodule withIconBrowserWindowwidgetCommand-line tool:
giconbrowser [folder]orpython -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.cleanupmoduleAdded case sensitivity option for glob patterns (default: case-insensitive matching)
Improved module name detection from
pyproject.tomlwhen name differs from directory nameEnhanced 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