예제 #1
0
def help_menu(root: Container) -> None:
    """A menu to display various commands"""

    commands = [
        ("help, ?", "show help menu"),
        ("search, /", "search for a person "),
        ("convert, $", "convert between USD and BEZO"),
    ]

    help_root = outer_container()
    help_root += Label("[bold 72]Help Menu")

    help_inner = Container()
    help_root += help_inner

    for name, text in commands:
        row = Splitter()
        row.arrangement = "20;30"

        row += Label("[157]" + name, align=Label.ALIGN_LEFT)
        row += Label("[italic 239]" + text, align=Label.ALIGN_RIGHT)
        help_inner += row

    fade_widget(root)

    help_root.center()
    help_root.print()
    getch()

    fade_widget(root, True)
예제 #2
0
def outer_container():
    """Return an outer-styled Container()"""

    cont = Container()
    cont.set_style("border", lambda depth, item: foreground(item, 239))
    cont.set_style("corner", lambda depth, item: foreground(item, 239))

    return cont
예제 #3
0
def create_container(height: int = 0):
    """Create container with the same data"""

    container = Container(vert_align=Container.VERT_ALIGN_TOP)
    container.set_char("border", ["│ ", "─", " │", "─"])
    container.set_char("corner", ["╭", "╮", "╯", "╰"])
    container += InputField(
        prompt=("you cant edit this.\n" + "-------------------\n"),
        value=("this is some\n" + "example value\n" + "second line\n\n\n\n" +
               "have a nice day!"),
    )

    container.forced_height = height

    return container
예제 #4
0
def generate_layout():
    """Generate home screen layout"""

    boxes.DOUBLE_TOP.set_chars_of(Container)
    Container.set_style("border", lambda depth, item: foreground(item, 234))
    Container.set_style("corner", lambda depth, item: foreground(item, 234))
    Splitter.set_style("separator", lambda depth, item: foreground(item, 234))
    Splitter.set_char("separator", boxes.DOUBLE_TOP.borders[0])

    corners = boxes.DOUBLE_TOP.corners.copy()
    corners[0] += " bezo "
    corners[1] = " calc " + corners[1]
    root = outer_container()
    root.set_char("corner", corners)
    root.forced_height = 32
    root.vert_align = Container.VERT_ALIGN_TOP

    header = Container() + Label("title")
    header[-1].id = "header_title"
    root += header

    inner = Container()
    inner.id = "inner"
    inner_title = (Splitter("39;36;36") + Label("[242 bold]Name:") +
                   Label("[242 bold]Worth in dollars:") +
                   Label("[242 bold]Worth in Bezos:"))
    inner_title.id = "inner_title"
    inner += inner_title

    for i in range(24):
        row = Splitter("39;36;36")
        if i > 0:
            row.id = f"inner_row{i - 1}"

        row += Label(align=Label.ALIGN_LEFT)
        row += Label()
        row += Label()
        inner += row

    root += inner

    root += Label()
    field = InputField(prompt=" ")
    field.id = "field"
    root += field

    with open(to_local(LAYOUT_DIR + "/bezos.ptg"), "w") as datafile:
        serializer.dump_to_file(root, datafile)
예제 #5
0
"""

from pytermgui import (
    Container,
    Prompt,
    Label,
    Splitter,
    alt_buffer,
    getch,
    ListView,
    ColorPicker,
    real_length,
)

with alt_buffer(cursor=False):
    Container.set_char("border", ["│ ", "─", " │", "─"])
    Container.set_char("corner", ["╭", "╮", "╯", "╰"])
    Splitter.set_char("separator", " ")

    main = Container(horiz_align=Container.HORIZ_ALIGN_LEFT)

    header = Splitter()
    header += Label("color picker one:", Label.ALIGN_LEFT)
    # header += Label("one", Label.ALIGN_CENTER)
    # header += Label("onne", Label.ALIGN_CENTER)
    # header += Label("onne", Label.ALIGN_CENTER)
    header += Label("color picker two:", Label.ALIGN_RIGHT)

    splitter = Splitter()
    splitter += ColorPicker(16)
    splitter += ColorPicker(16)
예제 #6
0
               "have a nice day!"),
    )

    container.forced_height = height

    return container


def field() -> InputField:
    return selected[0]


with alt_buffer(cursor=False):
    InputField.set_style("cursor", lambda depth, item: color(item, 72))

    main = Container(vert_align=Container.VERT_ALIGN_TOP)
    splitter = Splitter()

    left = create_container(30)
    splitter += left

    right = create_container(30)
    splitter += right

    main += Container() + splitter
    main.set_char("border", ["|x| ", "=", " |x|", "="])
    main.forced_width = 120

    fields = [left, right]
    selected = left
    field().focus()
예제 #7
0
def convert_menu(root: Container, bezo: int) -> None:
    """A menu to convert between BEZO and USD"""

    convert_root = outer_container()
    convert_root.forced_width = 70
    convert_root += Label("[bold 72]Convert Menu")

    convert_inner = Container()
    convert_root += convert_inner

    for name in ["[157]$USD", "[208]BEZO"]:
        row = Splitter("6;50")
        row += Label(name)
        row += InputField()
        convert_inner += row

    result_row = Splitter("6;50")
    result_row += Label("[bold 214]Result")
    result_row += Label()

    fade_widget(root)

    fields = [row[1] for row in convert_inner]
    focused = fields[0]
    focused.focus()

    convert_root.center()
    convert_root.print()

    while True:
        key = getch()

        if key == keys.TAB:
            focused.blur()
            focused = fields[len(fields) - fields.index(focused) - 1]
            focused.focus()

        elif key == keys.RETURN:
            value = focused.clear_value()
            if not value.isdigit() or int(value) == 0:
                return

            # USD -> BEZO
            if focused == fields[0]:
                converted = int(value) / (bezo * 10**6)
                text = f"[249]${value} converts to B{simplify_float(converted):,}!"

            # BEZO -> USD
            elif focused == fields[1]:
                converted = bezo * int(value) * 10**6
                text = f"[249]B{value} converts to ${simplify_float(converted):,}!"

            focused.blur()
            result_row[1].value = text
            convert_inner += result_row
            convert_root.print()
            getch()

            focused.focus()
            convert_root.wipe()
            convert_inner.pop(-1)

        elif key == keys.ESC:
            break

        else:
            focused.send(key)

        convert_root.print()

    fade_widget(root, True)
예제 #8
0
def random_rgb() -> tuple[int, int, int]:
    """Get random rgb color"""

    return ";".join(random_255() for _ in range(3))


def random_hex() -> str:
    """Get random hex color"""

    rgb = tuple(int(color) for color in random_rgb().split(";"))
    return "#" + "%02x%02x%02x" % rgb


# set up styles
border_markup = MarkupFormatter("[bold 60]{item}")
Container.set_style("border", border_markup)
Container.set_style("corner", border_markup)
Splitter.set_style("separator", border_markup)
Splitter.set_char("separator", boxes.SINGLE.borders[0])
boxes.SINGLE.set_chars_of(Container)

# create root Container
root = Container() + Prompt("[222 bold]hello", "[72]world")
boxes.DOUBLE_TOP.set_chars_of(root)

# create inner Container, add elements to it
inner = Container()
inner += Label("This is an inner [italic bold 24]label")
inner += Label(
    "All [208]widgets[/fg] support [bold @61 141]markup",
)
예제 #9
0
from pytermgui import Label, Container, boxes

art = """\
[bold 157] ____      [60] _____                  [210]  ____ _   _ ___ [/]
[bold 157]|  _ \ _   [60]|_   _|__ _ __ _ __ ___ [210] / ___| | | |_ _|[/]
[bold 157]| |_) | | | |[60]| |/ _ \ '__| '_ ` _ .[210]| |  _| | | || | [/]
[bold 157]|  __/| |_| |[60]| |  __/ |  | | | | | [210]| |_| | |_| || | [/]
[bold 157]|_|    \__, |[60]|_|\___|_|  |_| |_| |_|[210]\____|\___/|___|[/]
 ====== [bold 157]|___/[/fg] ======================================= [/]
"""

Container.set_char("border", [""] * 4)
root = Container()
for line in art.splitlines():
    root += Label(line)

root.center()
root.print()
예제 #10
0
    """Style function for values"""

    return color(item, 33 + 36 * depth)  # type: ignore


def highlight_style(depth: int, item: str) -> str:
    """Style function for highlighted elements"""

    return highlight(item, 99)


delimiter_style = create_style(225)
padding_label = Label()

with alt_buffer():
    Container.set_char("border", ["|| ", "~", " ||", "~"])

    Label.set_style("value", value_style)

    Prompt.set_style("value", value_style)
    Prompt.set_style("label", delimiter_style)
    Prompt.set_style("delimiter", delimiter_style)
    Prompt.set_style("highlight", highlight_style)

    ListView.set_style("highlight", highlight_style)
    ListView.set_style("options", value_style)
    ListView.set_style("delimiter", delimiter_style)

    ProgressBar.set_style("fill", delimiter_style)
    ProgressBar.set_style("delimiter", value_style)