Многострочный текст в панелях интерфейса Blender

К сожалению, интерфейс Blender не поддерживает перенос строк и многострочный вывод в текстовых полях. Слишком длинные для показа на панели текстовые строки обрезаются. Однако, текст в несколько строк все же можно вывести на панель интерфейса, используя несколько текстовых элементов вместо одного.

Для начала создадим простейшую панель в N-панели окне вьюпорта 3D Viewport и разместим на ней текстовый элемент label с нужным текстом.

Определим класс панели и зарегистрируем его.

Выполнив данный код нажатием на кнопку “Run Script”, мы создадим новую панель “MULTILINE TEXT” на которой будет размещен текст “Loren ipsum…” в одну строку.

Для того, чтобы сделать текст многострочным, разобьем его по пробелам с учетом ширины панели на отдельные строки.

Текущую ширину панели в пикселях можно получить из контекста окна.

Напишем функцию, которая будет разбивать переданную в нее строку текста так, чтобы длина каждой строки не превышала ширины панели. Для разбивки воспользуемся модулем “textwrap”.

В функцию мы передаем три параметра:

  • context – контекст окна для определения ширины панели
  • text – текст, который нужно показать
  • parent – элемент панели интерфейса на который мы будем выводить текст

Модуль “textwrap” разбивает текст не по пикселям, а по символам. Поэтому сначала мы определяем, сколько символов уложится в строку, нужной нам длины (ширина панели). Приблизительно можно взять среднюю ширину символа равную 7 пикселям.

После чего мы получаем список строк, на которые разделили текст.

Далее по этому списку на родительском элементе мы создаем нужное количество элементов label, в каждом из которых содержится очередная строка текста.

Оформив функцию, заменим вывод строки текста в нашей панели на вызов этой функции. Теперь весь текст располагается на панели построчно и даже будет подстраиваться при изменении ширины панели.

Полный код:

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии