mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 18:15:28 +03:00
76 lines
5.2 KiB
ReStructuredText
76 lines
5.2 KiB
ReStructuredText
.. _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:`этом разделе<root_redirect_stdout>`.
|
||
|
||
-----
|
||
|
||
Назначение и использование
|
||
--------------------------
|
||
|
||
Выбор между статической и динамической линией зависит от ваших потребностей в конкретном приложении или даже для конкретного ``Router``-а.
|
||
|
||
* **StaticDividingLine** идеально подходит, если:
|
||
|
||
* Вам нужен строгий, консистентный дизайн.
|
||
* Вы используете роутеры с отключенным перехватом ``stdout`` (``disable_redirect_stdout=True``), так как в этом случае динамическое вычисление длины невозможно.
|
||
|
||
* **DynamicDividingLine** (используется по умолчанию) является предпочтительным выбором, если:
|
||
|
||
* Вы хотите, чтобы интерфейс выглядел аккуратно и адаптивно.
|
||
* Вывод ваших команд имеет разную длину, и вы хотите, чтобы рамки всегда соответствовали контенту.
|
||
* В ваших хэндлерах нет ожидающих ``io`` операций.
|
||
|
||
Тип разделительной линии для всего приложения задается при инициализации ``App`` через параметр ``dividing_line``.
|
||
|
||
-----
|
||
|
||
Пример конфигурации
|
||
--------------------
|
||
|
||
.. literalinclude:: ../../../code_snippets/dividing_lines_snippet.py
|
||
:language: python
|
||
:linenos:
|