SigimaX - Reusable GUI Framework for Scientific Applications
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
✨ Highlights
- Extensible configuration system —
OptionField-based settings withget()/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 —
DockableConsolewith error-to-console routing and configurable namespace - Production-grade status bar — memory usage monitoring with alarm threshold, console toggle
- PlotPy integration —
DockablePlotWidgetand adapters for signal/image/ROI objects - Derivation pattern — subclass
SigimaXOptions+SGMXMainWindow+ callrun()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:
- Subclass
SigimaXOptionsto add application-specific configuration fields - Subclass
SGMXMainWindowto customize menus, toolbars, and dock widgets - 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.
© 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)
| File | Size | Uploaded | |
|---|---|---|---|
| sigimax-1.0.2.tar.gz | 528.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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