Table Of Contents
Text layout¶
Внутренний модуль для размещения текста в соответствии с параметрами и ограничениями. Это не является частью API и может измениться в любое время.
- class kivy.core.text.text_layout.LayoutLine¶
Описание строки текста. Строка текста состоит из множества экземпляров
LayoutWord
, каждый из которых имеет свой текст, размер и параметры.Экземпляр
LayoutLine
не всегда означает, что слова, содержащиеся в строке, закончились символом новой строки. Это так только в случае, еслиis_last_line
равно True. Например, одна настоящая строка текста может быть разделена на несколько экземпляровLayoutLine
, если вся строка не помещается в ограниченную ширину.- Parameters
- x: int
местоположение в текстуре, с которой начинается левая сторона этой строки.
- y: int
местоположение в текстуре, с которой рисуется нижняя часть этой строки.
- w: int
ширина строки. Это сумма индивидуальных ширин экземпляров
LayoutWord
. Не включает отступы.- h: int
высота строки. Это максимум индивидуальных высот его экземпляров, умноженных на line_height этого экземпляра. Поэтому это больше высоты слова.
- is_last_line: bool
является ли эта строка последней в абзаце. Когда True, это подразумевает, что за строкой следует символ новой строки. Символы новой строки не должны включаться в текст слов, но они подразумеваются при установке этого параметра в True.
- line_wrap: bool
является ли эта строка продолжением предыдущей строки, которая не помещалась в ограниченную ширину и, следовательно, была разбита на несколько экземпляров
LayoutLine
. line_wrap может быть True или False независимо от is_last_line.- words: list Python
список, содержащий только экземпляры
LayoutWord
, описывающих текст строки.
- h¶
h: ‘int’
- is_last_line¶
is_last_line: ‘int’
- line_wrap¶
line_wrap: ‘int’
- w¶
w: ‘int’
- words¶
words: list
- x¶
x: ‘int’
- y¶
y: ‘int’
- класс kivy.core.text.text_layout.LayoutWord¶
Базовый класс:
builtins.object
Формально описывает слово, содержащееся в строке. Название "слово" просто означает кусок текста и может использоваться для описания любого текста.
У слова есть ширина, высота и оно отображается в соответствии с сохраненными опциями в
options
. См.LayoutLine
для его использования.- Parameters
- options: dict
словарь параметров метки для этого слова.
- lw: int
ширина текста в пикселях.
- lh: int
высота текста в пикселях.
- text: строка
текст слова.
- lh¶
lh: 'int'
- lw¶
lw: 'int'
- options¶
options: dict
- text¶
text: объект
- kivy.core.text.text_layout.layout_text(text, список lines, кортеж size, кортеж text_size, словарь options, get_extents, int append_down, int complete)¶
Размещает текст в серию экземпляров
LayoutWord
иLayoutLine
в соответствии с указанными опциями.Функция предназначена для многократного вызова, при каждом вызове добавляется новый текст к последней строке (или первой строке, если добавление происходит вверх), за исключением случаев, когда в тексте есть символ новой строки. Каждый добавленный текст описывается своими собственными опциями, которые могут меняться между последовательными вызовами. Если текст ограничен по размеру, мы останавливаемся, как только достигнут ограничительный размер.
- Parameters
- text: строка или байты
текст, который нужно разбить на строки. Если список lines не пуст, текст добавляется к последней строке (или первой строке, если append_down установлен в False), пока не встретится символ новой строки, создавая новую строку в lines. См.
LayoutLine
.- lines: list
список экземпляров
LayoutLine
, каждый из которых описывает строку текста. Вызовыlayout_text()
добавляют или создают новые экземплярыLayoutLine
в lines.- size: кортеж из 2 целых чисел
размер размещенного текста до настоящего момента. При первом вызове, вероятно, должен быть (0, 0), после этого это должно быть (w, h), возвращенное этой функцией при предыдущем вызове. Когда размер достигает ограничительного размера, text_size, мы перестаем добавлять строки и возвращаем True для параметра clipped. В размер включены отступы по x и y.
- text_size: кортеж из 2 целых чисел или None.
ограничительный размер размещенного текста. Если хотя бы один из элементов равен None, текст не ограничивается в этом измерении. Например, (None, 200) ограничит высоту, включая отступы, до 200, а ширина не ограничивается. Первая строка и первый символ строки всегда возвращаются, даже если они превышают ограничение. Значение может изменяться между разными вызовами.
- options: dict
опции метки этого text. Опции сохраняются с каждым словом, что позволяет разным словам иметь разные опции при последовательных вызовах.
Обратите внимание, что в options должен включаться ключ space_width со значением, указывающим ширину пробела для этого набора опций.
- get_extents: callable
функция, вызываемая с строкой, которая возвращает кортеж, содержащий ширину и высоту строки.
- append_down: bool
Определяет, добавляются ли последующие вызовы функции строки перед или после существующих строк. Если True, они добавляются к последней строке и ниже нее. Если False, текст добавляется к первой строке и выше нее. Например, если False, то все, что находится после последнего символа новой строки в text, добавляется к первой строке в lines. Все, что находится перед последним символом новой строки, вставляется в начало lines в том же порядке, что и текст; порядок строк не изменяется.
Это позволяет размещать текст сверху вниз до достижения ограничения или снизу вверх до достижения ограничения.
- complete: bool
определяет, завершают ли эти строки текст. Когда в options установлено значение strip в True, все ведущие и завершающие пробелы удаляются из каждой строки, за исключением последней строки (или первой строки, если append_down равен False), удаляются только ведущие пробелы. Это потому, что к последней строке все равно может быть добавлен дополнительный текст, поэтому мы не можем их удалять. Если complete равен True, это указывает, что больше текста не будет добавлено, и все строки будут обрезаны.
Функцию также можно вызвать с text, установленным в пустую строку, и complete, установленным в True, чтобы обрезать последнюю (первую) строку.
- Returns
кортеж из 3 элементов: (w, h, clipped). w и h - это ширина и высота текста на данный момент и включают отступы. Они могут быть больше, чем text_size, например, если даже не одно слово не поместилось, будет возвращена только первая строка. clipped равен True, если весь текст не был добавлен в строки, потому что w, h достигли ограничивающего размера.
Ниже приведен простой пример без отступов и без удаления:
>>> from kivy.core.text import Label >>> from kivy.core.text.text_layout import layout_text >>> l = Label() >>> lines = [] >>> # layout text with width constraint by 50, but no height constraint >>> w, h, clipped = layout_text('heres some text\nah, another line', ... lines, (0, 0), (50, None), l.options, l.get_cached_extents(), True, ... False) >>> w, h, clipped (46, 90, False) # now add text from bottom up, and constrain width only be 100 >>> w, h, clipped = layout_text('\nyay, more text\n', lines, (w, h), ... (100, None), l.options, l.get_cached_extents(), False, True) >>> w, h, clipped (77, 120, 0) >>> for line in lines: ... print('line w: {}, line h: {}'.format(line.w, line.h)) ... for word in line.words: ... print('w: {}, h: {}, text: {}'.format(word.lw, word.lh, ... [word.text])) line w: 0, line h: 15 line w: 77, line h: 15 w: 77, h: 15, text: ['yay, more text'] line w: 31, line h: 15 w: 31, h: 15, text: ['heres'] line w: 34, line h: 15 w: 34, h: 15, text: [' some'] line w: 24, line h: 15 w: 24, h: 15, text: [' text'] line w: 17, line h: 15 w: 17, h: 15, text: ['ah,'] line w: 46, line h: 15 w: 46, h: 15, text: [' another'] line w: 23, line h: 15 w: 23, h: 15, text: [' line']