Files
dpg-gauges/README.md

3.0 KiB

dpg-gauges

Dear PyGui gauge widgets for dashboards and telemetry displays.

Install

uv add dpg-gauges

For local development from another project:

uv add --editable ../dpg-gauges

Minimal Example

import dearpygui.dearpygui as dpg
import dpg_gauges as dpgg

dpg.create_context()
with dpg.window(label="Dashboard"):
    dpgg.analog_gauge(tag="rpm", label="RPM", value=3200, max_value=8000, width=220, height=220)
    dpgg.digital_gauge(tag="speed", label="Speed", value=88, unit="km/h", width=220, height=90)

dpg.create_viewport(title="gauges", width=520, height=340)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

Dashboard Example

with dpg.window(label="Engine"):
    with dpgg.gauge_panel(label="Powertrain", width=-1, height=260):
        with dpgg.gauge_grid(columns=3, min_column_width=180):
            dpgg.analog_gauge(tag="rpm", label="RPM", max_value=8000, redline_start=6500)
            dpgg.bar_gauge(tag="boost", label="Boost", max_value=30, unit="psi")
            dpgg.status_light(tag="ecu", label="ECU", state=True)

gauge_grid is a wrapping, table-backed layout. columns is a maximum; if the parent is too narrow for columns * min_column_width, the grid uses fewer columns and continues on the next row instead of creating a horizontal scrollbar. Gauges with width=0 or width=-1 fill their grid cell.

Gauges also accept Dear PyGui's usual parent argument for adding a gauge to an existing container after that container has already been created:

dpg.add_window(tag="data_input", label="Data Input")
dpgg.analog_gauge(tag="rpm", parent="data_input", label="RPM")

The parent is applied to the gauge's outer group. The gauge's internal drawlist is then parented to that group.

GUI-Thread Contract

Dear PyGui item operations must happen on the GUI thread. Gauge creation and runtime updates such as set_value, update_gauge, set_thresholds, and delete_gauge are GUI-thread functions. Worker threads may produce data, but applications should marshal the latest values to a Dear PyGui frame callback before calling dpg-gauges APIs.

Animation And Smoothing

Animation changes the displayed value over a short duration without changing the raw target value. Smoothing improves readability during high-rate updates.

dpgg.digital_gauge(
    tag="speed",
    animation=dpgg.AnimationConfig(enabled=True, duration=0.15),
    smoothing=dpgg.SmoothingConfig(enabled=True, alpha=0.25, max_step=5),
)

Disable animation with animation=False for immediate response.

Thresholds And Markers

Thresholds and markers are visual only; they do not trigger callbacks or alarms.

dpgg.bar_gauge(
    tag="coolant",
    min_value=40,
    max_value=120,
    thresholds=[dpgg.ThresholdBand(100, 120, (255, 45, 45, 150))],
    markers=[dpgg.GaugeMarker(110, (255, 255, 255, 255), thickness=3)],
)

Implemented gauge types: analog, digital, bar, level, status light, segmented, compass, thermometer, battery, and multi-value.