TaskHandler

TaskHandler is simple support for background processes in your TermUI apps using threading.

Using the TaskHandler

Lets make a timer that can be toggled by a checkbox. (with some active centering)

import time
import curses
from pyTermUI.ui import UI
from pyTermUI.text import Text
from pyTermUI.region import Region
from pyTermUI.checkbox import Checkbox
from pyTermUI.position import Position
from pyTermUI.Toolkit.taskhandler import TaskHandler

def main(stdscr):
    ui = UI(stdscr)

    count = 0
    def background():
        nonlocal count
        count += 1

        text.set_text(f"LIVE COUNTER: {count}")
        text.centerXY()
        checkbox.move(text.pack.get("left")-Position(3,0))

        ui.draw()
        time.sleep(.125)

    def on_checkbox(checkbox):
        text.color = checkbox.color
        if checkbox.checked:
            handler.run("counter")
        else:
            handler.kill("counter")


    region = Region("A cool region", Position.ORIGIN(), Position.DEFAULT_TERM_SIZE())


    handler = TaskHandler()
    # init task handler

    checkbox = Checkbox(False, Position(0,0), on_checkbox)

    text = Text(f"LIVE COUNTER: {count}", Position(0,0))

    text.callback = checkbox.event_mask

    handler.create("counter", background, args=(), iterations=0)
    # create an infinite loop background task

    region.add_element(checkbox)
    region.add_element(text)

    text.centerXY()
    checkbox.move(text.pack.get("left")-Position(3,0))

    ui.add_toolkits(handler)
    ui.add_region(region)

    ui.activate()

if __name__ == "__main__":
    curses.wrapper(main)