Skip to main content

SigimaX - Reusable GUI Framework for Scientific Applications

SigimaX

license PyPI pyversions

SigimaX is an open-source Python framework for building Qt-based scientific desktop applications. It provides a reusable application skeleton — main window, configuration system, embedded widgets, and HDF5 infrastructure — so that developers can focus on domain-specific features.

🔬 Developed by the DataLab Platform Developers, SigimaX is extracted from DataLab and powers its GUI layer.


🌟 Project & Sponsors

Project/Sponsor Description
DataLab logo Open-source platform for scientific signal and image processing, built on SigimaX.
NLnet logo European non-profit supporting open-source and internet projects. SigimaX has received funding from NLnet for its development, through the DataLab project.

✨ Highlights

  • Extensible configuration system — OptionField-based settings with get()/set()/context() API and JSON persistence
  • Rich widget catalog — 15 ready-to-use scientific widgets: curve fitting, peak detection, signal baseline, HDF5 browser, log viewer, wizard dialogs, and more
  • Complete HDF5 infrastructure — built-in file browser, importer, and workspace save/load
  • Embedded Python console — DockableConsole with error-to-console routing and configurable namespace
  • Production-grade status bar — memory usage monitoring with alarm threshold, console toggle
  • PlotPy integration — DockablePlotWidget and adapters for signal/image/ROI objects
  • Derivation pattern — subclass SigimaXOptions + SGMXMainWindow + call run() to build a full app in minutes

💡 Use Cases

SigimaX is meant to be:

  • A framework for building scientific desktop apps with Qt
  • A reusable main window with menus, toolbars, docks, and HDF5 workspace management
  • A widget library for signal/image analysis dialogs (fitting, peak detection, baseline, cursor, delta-X)
  • A configuration backbone for apps that need persistent user preferences

📖 Design Philosophy

SigimaX separates the generic application skeleton from domain-specific logic. Derived applications follow a three-step pattern:

  1. Subclass SigimaXOptions to add application-specific configuration fields
  2. Subclass SGMXMainWindow to customize menus, toolbars, and dock widgets
  3. Call sigimax.app.run() to launch the application with splash screen support

This architecture is proven in production: DataLab is built entirely on this derivation pattern.

Position in the Stack

End-user apps (DataLab, custom scientific apps)
         ↓  subclass / configure
      SigimaX            ← THIS PROJECT (framework layer)
         ↓  depends on
   Sigima (computation) + PlotPy + guidata + PythonQwt
         ↓
     NumPy / SciPy / Qt

🚀 Quick Start

from sigimax.app import run
from sigimax.config import CONF as Conf, SigimaXOptions, EnumOptionField, _
from sigimax.mainwindow import SGMXMainWindow
from sigimax.widgets.plotdock import DockablePlotWidget
from sigimax.config import TypedOptionField
from plotpy.constants import PlotType

# A missing option may be initialized on first read:
color_mode = Conf.color_mode.get("auto")


# 1. Define custom options
class MyAppOptions(SigimaXOptions):
    def __init__(self):
        super().__init__()
        self.app_name.set("MyApp")
        self.greeting = TypedOptionField(
            self,
            "greeting",
            default="Hello!",
            expected_type=str,
            description="Startup message",
        )


# 2. Customize the main window
class MyAppMainWindow(SGMXMainWindow):
    def __init__(self, console=None, hide_on_close=False):
        Conf.app_name.set("MyApp")
        super().__init__(console=console, hide_on_close=hide_on_close)
        # Add a dockable curve plot
        self.curve_dock = DockablePlotWidget(self, PlotType.CURVE)
        dock, loc = self.curve_dock.create_dockwidget(_("Curve Viewer"))
        self.addDockWidget(loc, dock)


# 3. Launch
run(window_class=MyAppMainWindow)

⚙️ Architecture

sigimax/
├── app.py              # Application launcher (create / run)
├── config.py           # Configuration system (SigimaXOptions, CONF singleton)
├── env.py              # Runtime environment (verbosity, unattended mode)
├── mainwindow.py       # SGMXMainWindow (generic main window)
├── widgets/            # Reusable Qt widgets
│   ├── plotdock.py     # DockablePlotWidget
│   ├── splashscreen.py # Configurable splash screen
│   ├── h5browser.py    # HDF5 file browser
│   ├── logviewer.py    # Log viewer dialog
│   ├── status.py       # Status bar widgets (memory, console)
│   ├── fitdialog.py    # Curve fitting dialogs
│   ├── signalpeak.py   # Signal peak detection
│   ├── signalbaseline.py # Signal baseline selection
│   ├── signalcursor.py # Signal cursor selection
│   ├── signaldeltax.py # Signal delta-X measurement
│   ├── wizard.py       # Multi-page wizard dialog
│   └── ...             # File dialogs, warning/error boxes
├── h5/                 # HDF5 I/O (read/write/import)
├── adapters_plotpy/    # Converters between PlotPy/guidata and Sigima objects
├── utils/              # Qt helpers, config dir resolution
├── data/               # Icons, resources
└── locale/             # Translations (EN, FR)

📦 Installation

pip install sigimax

Or in a development environment:

git clone https://github.com/DataLab-Platform/SigimaX.git
cd SigimaX
pip install -e .

📚 Documentation

📖 Full documentation (in progress) is available at: 👉 https://sigimax.readthedocs.io/

Want to use SigimaX as part of the full DataLab platform? Check out: DataLab


🧪 Testing

SigimaX comes with a comprehensive test suite based on pytest (155 tests).

✅ Validated Environments

The test suite has been checked with the following matrix:

  • Python: 3.10, 3.11, 3.12, 3.13, 3.14
  • Operating systems: Windows, Linux
  • Qt bindings: PyQt5, PyQt6, PySide6 (future fix needed)

⚠️ Note: PySide6 is currently known to be not fully working in this matrix.

# Run all tests (offscreen, no GUI)
python scripts/run_with_env.py python -m pytest

# Show Qt windows during tests
python scripts/run_with_env.py python -m pytest --show-windows

🧠 License

SigimaX is distributed under the terms of the BSD 3-Clause license. See LICENSE for details.


🤝 Contributing

Bug reports, feature requests and pull requests are welcome! See the CONTRIBUTING guide to get started.


Python NumPy SciPy scikit-image OpenCV


© DataLab Platform Developers

Metadata

Release files for sigimax 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sigimax 1.1.0
File Size Uploaded Provenance Actions
sigimax-1.1.0.tar.gz 673.1 kB With provenance Details for sigimax-1.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sigimax 1.1.0
File Interpreter ABI Platform Actions
sigimax-1.1.0-py3-none-any.whl Python 3 none any Details for sigimax-1.1.0-py3-none-any.whl

Total release size: 1.1 MB

Release files / sigimax-1.1.0.tar.gz

Download URL sigimax-1.1.0.tar.gz
Size 673.1 kB
Tags Source
SHA-256 checksum
How to use checksums
c5c9d250a96f7c910a3fe022825d36efe3861d3bf7a5afe2e8e3bfbbb5df83ce
BLAKE2b-256 checksum
How to use checksums
45d23eb353620722113e5f1602e2d36ab2a6047329e8d423a5024269e02f806e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.

Transparency log

Release files / sigimax-1.1.0-py3-none-any.whl

Download URL sigimax-1.1.0-py3-none-any.whl
Size 379.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d0e0a332643fe023f7d7bcda5a008f4a4b90d073e756fd170e053ebb6369e806
BLAKE2b-256 checksum
How to use checksums
911d82522d8dad958fdd0ce0cb0c3c9cdee862df1b4e77e83b32e01dabcb8a4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.

Transparency log

Security for sigimax 1.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for sigimax-1.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page