.. _root_api_app_dividing_lines: Dividing Lines ============== Разделительные линии в ``Argenta`` играют важную роль в визуальном оформлении консольного интерфейса. Они используются для структурирования вывода, отделения блоков информации друг от друга (например, вывода команды от следующего приглашения к вводу). Библиотека предлагает два подхода к управлению разделительными линиями: статический и динамический, каждый из которых имеет свои преимущества и сценарии использования. ---- Класс ``StaticDividingLine`` ----------------------------- ``StaticDividingLine`` — это класс, который создает разделительную линию **фиксированной** длины. Длина и символ-заполнитель задаются при инициализации объекта. Этот тип линии полезен, когда вам нужен предсказуемый и унифицированный внешний вид интерфейса, независимо от содержимого вывода. .. code-block:: python :linenos: def __init__(self, unit_part: str = "-", *, length: int = 25) -> None Создает экземпляр статической разделительной линии. * ``unit_part``: Символ, который будет использоваться для построения линии. Учитывается только первый символ строки. По умолчанию: ``-``. * ``length``: Целое число, определяющее фиксированную длину линии в символах. Является keyword-only аргументом. По умолчанию: ``25``. ----- Класс ``DynamicDividingLine`` ------------------------------ ``DynamicDividingLine`` представляет собой более "умный" подход. Этот класс создает линию, длина которой **динамически** подстраивается под самую длинную строку, выведенную в консоль, в рамках выполнения одной команды. Это достигается за счет механизма перехвата `stdout`. В результате разделительные линии всегда идеально обрамляют выводимый контент, что выглядит очень аккуратно. .. code-block:: python :linenos: __init__(self, unit_part: str = "-") -> None Создает экземпляр динамической разделительной линии. * ``unit_part``: Символ, который будет использоваться для построения линии. По умолчанию: ``-``. Длина для этой линии не задается при инициализации, так как она вычисляется автоматически во время выполнения. .. warning:: Обязательно почитайте про нюансы использования динамических линий и перехвата ``stdout`` в :ref:`этом разделе`. ----- Назначение и использование -------------------------- Выбор между статической и динамической линией зависит от ваших потребностей в конкретном приложении или даже для конкретного ``Router``-а. * **StaticDividingLine** идеально подходит, если: * Вам нужен строгий, консистентный дизайн. * Вы используете роутеры с отключенным перехватом ``stdout`` (``disable_redirect_stdout=True``), так как в этом случае динамическое вычисление длины невозможно. * **DynamicDividingLine** (используется по умолчанию) является предпочтительным выбором, если: * Вы хотите, чтобы интерфейс выглядел аккуратно и адаптивно. * Вывод ваших команд имеет разную длину, и вы хотите, чтобы рамки всегда соответствовали контенту. * В ваших хэндлерах нет ожидающих ``io`` операций. Тип разделительной линии для всего приложения задается при инициализации ``App`` через параметр ``dividing_line``. ----- Пример конфигурации -------------------- .. literalinclude:: ../../../code_snippets/dividing_lines_snippet.py :language: python :linenos: