pydashing

High-level terminal-based dashboard


Keywords
dashboard, terminal
License
Other
Install
pip install pydashing==1.0.0

Documentation

Dashing is a library to quickly create terminal-based dashboards in Python.

Example

Similar libraries for other languages: termui blessed blessed-contrib

Dependencies

The blessed library.

Installation

pip install pydashing

Quick mode

If you want to provide a simple UI to a script, Dashing can generate a layout automatically.

import time
from dashing import QuickDash

def main():
    d = QuickDash()
    d.status = "Running..."
    d.logs.append("Started")
    for progress in range(100):
      d.gauges['progess'] = progress
      if progress % 10 == 0:
        d.logs.append("Started")
      time.sleep(0.05)

    d.status = "Done!"
    time.sleep(1)

Normal mode

In normal mode you have full control over the UI

Usage
from time import sleep, time
import math

from blessed import Terminal

from dashing import *

if __name__ == '__main__':

    term = Terminal()
    with term.fullscreen():
        ui = HSplit(
                VSplit(
                    HGauge(val=50, title="only title", border_color=5, background_color=3),
                    HGauge(label="only label", val=20, border_color=5, background_color=4),
                    HGauge(label="only label", val=30, border_color=5, background_color=5),
                    HGauge(label="only label", val=50, border_color=5, background_color=6),
                    HGauge(label="only label", val=80, border_color=5, background_color=1),
                    HGauge(val=20),
                    HGauge(label="label, no border", val=55),
                    HSplit(
                        VGauge(val=0, border_color=2),
                        VGauge(val=5, border_color=2),
                        VGauge(val=30, border_color=2),
                        VGauge(val=50, border_color=2),
                        VGauge(val=80, border_color=2, color=4),
                        VGauge(val=95, border_color=2, color=3),
                        ColorRangeVGauge(
                            val=100,
                            border_color=2,
                            colormap=(
                                (33, 2),
                                (66, 3),
                                (100, 1),
                            )
                        ),
                    )
                ),
                VSplit(
                    Text('Hello World,\nthis is dashing.', border_color=2),
                    Log(title='logs', border_color=5),
                    VChart(border_color=2, color=2),
                    HChart(border_color=2, color=2),
                    HBrailleChart(border_color=2, color=2),
                    # HBrailleFilledChart(border_color=2, color=2),
                ),
                title='Dashing',
            )
        log = ui.items[1].items[1]
        vchart = ui.items[1].items[2]
        hchart = ui.items[1].items[3]
        bchart = ui.items[1].items[4]
        # bfchart = ui.items[1].items[5]
        log.append("0 -----")
        log.append("1 Hello")
        log.append("2 -----")
        prev_time = time()
        for cycle in range(0, 200):
            ui.items[0].items[0].value = int(50 + 49.9 * math.sin(cycle / 80.0))
            ui.items[0].items[1].value = int(50 + 45 * math.sin(cycle / 20.0))
            ui.items[0].items[2].value = int(50 + 45 * math.sin(cycle / 30.0 + 3))

            vgauges = ui.items[0].items[-1].items
            for gaugenum, vg in enumerate(vgauges):
                vg.value = 50 + 49.9 * math.sin(cycle / 12.0 + gaugenum)

            t = int(time())
            if t != prev_time:
                log.append("%s" % t)
                prev_time = t
            vchart.append(50 + 50 * math.sin(cycle / 16.0))
            hchart.append(99.9 * abs(math.sin(cycle / 26.0)))
            bchart.append(50 + 50 * math.sin(cycle / 6.0))
            # bfchart.append(50 + 50 * math.sin(cycle / 16.0))
            ui.display()

            sleep(1.0/25)