Skip to main content

sciwidgets

PySide6 widgets for scientific desktop apps: math labels rendered with LaTeX/mathtext, dialogs, and parameter inputs such as sliders, range sliders and validated number fields.

Sliders demo

Right-click menu, Set Value and Edit Configuration:

Slider interaction

The widgets were written for the Maxwell Bloch Solver and moved into this package so other apps can share them.

Features

  • Math labels: MathLabel renders LaTeX through Matplotlib and scales cleanly as SVG. It uses your system LaTeX when installed and falls back to Matplotlib's mathtext otherwise.
  • Sliders: integer, float, array, range and multi-variable sliders with LaTeX names and units, optional range labels, a default-value marker and a right-click menu (save/reset default, set value, ±inf, edit range and format).
  • Scientific number format: "{:.3S}" displays values as 1.23×10⁴.
  • Validated input: NumericLineEdit checks numbers and limits while typing and marks invalid input with a red frame.
  • Parameter widgets: line edit, combo box and toggle sharing one interface with the sliders (get_value / set_value, get_config / set_config) and name/value columns that line up across a panel.
  • Dialogs: information, warning, error, question, rich-text and About dialogs.

Components

Import Contents
sciwidgets.labels MathLabel (LaTeX/mathtext label), set_latex_enabled
sciwidgets.params FloatSlider, IntSlider, ArraySlider, FloatRangeSlider, IntRangeSlider, MultiVariableSlider, ParameterLineEdit, ParameterComboBox, ParameterToggle, NumericLineEdit, SliderFeature
sciwidgets.dialogs show_information, show_warning, show_critical, show_rich_information, show_about_dialog, ask_question, AskResult
sciwidgets.style SciStyle, apply_sci_style, sci_style_sheet
sciwidgets.formatting pretty_sci_text, value_to_text and other format helpers

Install

pip install sciwidgets

Requires Python 3.10+, PySide6 6.5+, Matplotlib and NumPy (installed automatically). A LaTeX installation is optional.

For development, from the repo root:

pip install -e .

Quick start

import sys

from PySide6.QtWidgets import QApplication, QVBoxLayout, QWidget

from sciwidgets.params import FloatRangeSlider, FloatSlider
from sciwidgets.style import apply_sci_style

app = QApplication(sys.argv)
apply_sci_style(app)  # required, see "Style" below

win = QWidget()
layout = QVBoxLayout(win)

t1 = FloatSlider(
    label="T_1", unit=r"\mathrm{ms}",
    min_val=0.1, max_val=10.0, init_val=1.0, val_fmt="{:.2f}",
    min_limit=0.0, min_limit_inclusive=False,
)
band = FloatRangeSlider(
    label=r"\nu", unit=r"\mathrm{GHz}",
    min_val=6.60, max_val=6.75, init_vals=(6.65, 6.70), val_fmt="{:.3f}",
)
layout.addWidget(t1)
layout.addWidget(band)

t1.valueChanged.connect(lambda v: print("T1 =", v))
band.valueChanged.connect(lambda v: print("band =", v["range"]))

win.show()
sys.exit(app.exec())

Labels and units are written in LaTeX math mode, without the $ signs.

Style

The widgets rely on SciStyle, a Fusion-based Qt style, for part of their behaviour: clicking a slider groove moves the handle there, disabled sliders get a flat groove, and invalid numeric input gets a red frame. Apply it once at startup:

from sciwidgets.style import apply_sci_style

apply_sci_style(app, my_app_style_sheet)  # your own rules are appended

Signals

valueChanged, defaultChanged and configChanged are emitted only for user actions (dragging, typing, the context menu, dialogs). Setting values from code with set_value, set_config and similar methods is silent, so loading saved parameters never triggers your handlers. Read the new state with get_value() / get_config() after setting it.

Demos

Each subpackage has a runnable demo:

python -m sciwidgets.labels
python -m sciwidgets.dialogs
python -m sciwidgets.params
python -m sciwidgets.params.sliders

Versions

Releases are Git tags following semantic versioning. Pin an exact tag in your app's requirements, as in the install line above, and move to a newer tag when you are ready to test it.

License

MIT License. See LICENSE.

Author

Vahid Anari · GitHub · LinkedIn

Metadata

Release files for sciwidgets 0.1.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 sciwidgets 0.1.2
File Size Uploaded
sciwidgets-0.1.2.tar.gz 72.4 kB Details

Built distribution (wheel)

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

Total release size: 153.4 kB

Release files / sciwidgets-0.1.2.tar.gz

Download URL sciwidgets-0.1.2.tar.gz
Size 72.4 kB
Tags Source
SHA-256 checksum
How to use checksums
220d405afbba6a0fbaf4d5fa949196a0fd55ac6e539334068acebf70aaa797ef
BLAKE2b-256 checksum
How to use checksums
bc3265eedb7cfadd46625069982cafb9db97d8cbfe7343d6d5af541dba420744
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release files / sciwidgets-0.1.2-py3-none-any.whl

Download URL sciwidgets-0.1.2-py3-none-any.whl
Size 81.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6976cee5f0c5a77a47e6177a952355865c1a0cc73d1efb45fd9b0d9831707b03
BLAKE2b-256 checksum
How to use checksums
2577458d11d90058eea89e8e37422eae102c84eb95f5ac2a9bfc5aa28bf422ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release history Release notifications | RSS feed

0.2.0

2 release files

This release

0.1.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