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 systemOptionField-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 consoleDockableConsole with error-to-console routing and configurable namespace
  • Production-grade status bar — memory usage monitoring with alarm threshold, console toggle
  • PlotPy integrationDockablePlotWidget 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.9, 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

Release files for sigimax 1.0.2

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.0.2
File Size Uploaded
sigimax-1.0.2.tar.gz 528.6 kB Details

Built distribution (wheel)

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

Total release size: 806.8 kB

Release files / sigimax-1.0.2.tar.gz

Download URL sigimax-1.0.2.tar.gz
Size 528.6 kB
Tags Source
SHA-256 checksum
How to use checksums
0aa304e2a7924cee092fcdbc03c48f6123c361c5aee33da38e7e62f02c70908a
BLAKE2b-256 checksum
How to use checksums
f1af306dae8a03f5d3adc098184f8895e9790941d9d7b74a0cddae703e263d3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 28, 2026.

Transparency log

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

Download URL sigimax-1.0.2-py3-none-any.whl
Size 278.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
196ab5a69792784b034dc4b75808ca680a2bf6c0f99d0129ab137fd634eac12f
BLAKE2b-256 checksum
How to use checksums
464858e6be3afac136e9a89cd59628adbdfe843ca19218b8a1d1db26044f2d39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 28, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

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