This commit is contained in:
2025-11-02 00:17:28 +03:00
parent acddb1fbc6
commit df7313912c
26 changed files with 501 additions and 566 deletions
+17 -18
View File
@@ -3,15 +3,14 @@
Dividing Lines
==============
Разделительные линии в ``Argenta`` играют важную роль в визуальном оформлении консольного интерфейса. Они используются для структурирования вывода, отделения блоков информации друг от друга (например, вывода команды от следующего приглашения к вводу).
Библиотека предлагает два подхода к управлению разделительными линиями: статический и динамический, каждый из которых имеет свои преимущества и сценарии использования.
Разделительные линии в ``Argenta`` используются для визуального структурирования вывода и отделения блоков информации друг от друга. Библиотека предлагает два типа линий: статическую и динамическую.
----
Класс ``StaticDividingLine``
-----------------------------
``StaticDividingLine`` — это класс, который создает разделительную линию **фиксированной** длины. Длина и символ-заполнитель задаются при инициализации объекта. Этот тип линии полезен, когда вам нужен предсказуемый и унифицированный внешний вид интерфейса, независимо от содержимого вывода.
``StaticDividingLine`` создаёт разделительную линию **фиксированной** длины. Этот тип линии полезен для создания предсказуемого и унифицированного интерфейса.
.. code-block:: python
:linenos:
@@ -19,28 +18,28 @@ Dividing Lines
def __init__(self, unit_part: str = "-", *,
length: int = 25) -> None
Создает экземпляр статической разделительной линии.
Создаёт экземпляр статической разделительной линии.
* ``unit_part``: Символ, который будет использоваться для построения линии. Учитывается только первый символ строки. По умолчанию: ``-``.
* ``length``: Целое число, определяющее фиксированную длину линии в символах. Является keyword-only аргументом. По умолчанию: ``25``.
* ``unit_part``: Символ для построения линии (учитывается только первый символ). По умолчанию: ``-``.
* ``length``: Фиксированная длина линии (keyword-only аргумент). По умолчанию: ``25``.
-----
Класс ``DynamicDividingLine``
------------------------------
``DynamicDividingLine`` представляет собой более "умный" подход. Этот класс создает линию, длина которой **динамически** подстраивается под самую длинную строку, выведенную в консоль, в рамках выполнения одной команды. Это достигается за счет механизма перехвата `stdout`. В результате разделительные линии всегда идеально обрамляют выводимый контент, что выглядит очень аккуратно.
``DynamicDividingLine`` создаёт линию, длина которой **динамически** подстраивается под самую длинную строку в выводе команды. Это требует перехвата `stdout`, в результате чего разделители идеально обрамляют выводимый контент.
.. code-block:: python
:linenos:
__init__(self, unit_part: str = "-") -> None
Создает экземпляр динамической разделительной линии.
Создаёт экземпляр динамической разделительной линии.
* ``unit_part``: Символ, который будет использоваться для построения линии. По умолчанию: ``-``.
* ``unit_part``: Символ для построения линии. По умолчанию: ``-``.
Длина для этой линии не задается при инициализации, так как она вычисляется автоматически во время выполнения.
Длина вычисляется автоматически и не задаётся при инициализации.
.. warning::
Обязательно почитайте про нюансы использования динамических линий и перехвата ``stdout`` в :ref:`этом разделе<root_redirect_stdout>`.
@@ -50,20 +49,20 @@ Dividing Lines
Назначение и использование
--------------------------
Выбор между статической и динамической линией зависит от ваших потребностей в конкретном приложении или даже для конкретного ``Router``-а.
Выбор между статической и динамической линией зависит от ваших задач.
* **StaticDividingLine** идеально подходит, если:
* Вам нужен строгий, консистентный дизайн.
* Вы используете роутеры с отключенным перехватом ``stdout`` (``disable_redirect_stdout=True``), так как в этом случае динамическое вычисление длины невозможно.
* Вам нужен строгий и консистентный дизайн.
* Вы используете роутеры с отключённым перехватом ``stdout`` (``disable_redirect_stdout=True``), где динамическое вычисление длины невозможно.
* **DynamicDividingLine** (используется по умолчанию) является предпочтительным выбором, если:
* **DynamicDividingLine** (поведение по умолчанию) предпочтительный выбор, если:
* Вы хотите, чтобы интерфейс выглядел аккуратно и адаптивно.
* Вывод ваших команд имеет разную длину, и вы хотите, чтобы рамки всегда соответствовали контенту.
* В ваших хэндлерах нет ожидающих ``io`` операций.
* Вы хотите, чтобы интерфейс был адаптивным.
* Вывод ваших команд имеет разную длину.
* В ваших обработчиках нет интерактивных операций ввода (например, ``input()``).
Тип разделительной линии для всего приложения задается при инициализации ``App`` через параметр ``dividing_line``.
Тип разделителя для всего приложения задаётся при инициализации ``App`` через параметр ``dividing_line``.
-----