pyglet.text.layout
Render simple text and formatted documents efficiently.
Three layout classes are provided:
TextLayoutThe entire document is laid out before it is rendered. The layout will be grouped with other layouts in the same batch (allowing for efficient rendering of multiple layouts).
Any change to the layout or document, and even querying some properties, will cause the entire document to be laid out again.
ScrollableTextLayoutBased on
TextLayout().A separate group is used for layout which crops the contents of the layout to the layout rectangle. Additionally, the contents of the layout can be “scrolled” within that rectangle with the
view_xandview_yproperties.IncrementalTextLayoutBased on
ScrollableTextLayout.When the layout or document are modified, only the affected regions are laid out again. This permits efficient interactive editing and styling of text.
Only the visible portion of the layout is actually rendered; as the viewport is scrolled additional sections are rendered and discarded as required. This permits efficient viewing and editing of large documents.
Additionally, this class provides methods for locating the position of a caret in the document, and for displaying interactive text selections.
All three layout classes can be used with either UnformattedDocument or
FormattedDocument, and can be either single-line or multiline. The
combinations of these options effectively provides 12 different text display
possibilities.
Style attributes
The following character style attribute names are recognised by the layout classes. Data types and units are as specified.
Where an attribute is marked “as a distance” the value is assumed to be
in pixels if given as an int or float, otherwise a string of the form
"0u" is required, where 0 is the distance and u is the unit; one
of "px" (pixels), "pt" (points), "pc" (picas), "cm"
(centimeters), "mm" (millimeters) or "in" (inches). For example,
"14pt" is the distance covering 14 points, which at the default DPI of 96
is 18 pixels.
font_nameFont family name, as given to
pyglet.font.load().font_sizeFont size, in points.
weightString.
italicBoolean.
underline4-tuple of ints in range (0, 255) giving RGBA underline color, or None (default) for no underline.
kerningAdditional space to insert between glyphs, as a distance. Defaults to 0.
baselineOffset of glyph baseline from line baseline, as a distance. Positive values give a superscript, negative values give a subscript. Defaults to 0.
color4-tuple of ints in range (0, 255) giving RGBA text color
background_color4-tuple of ints in range (0, 255) giving RGBA text background color; or
Nonefor no background fill.
The following paragraph style attribute names are recognised. Note that paragraph styles are handled no differently from character styles by the document: it is the application’s responsibility to set the style over an entire paragraph, otherwise results are undefined.
alignleft(default),centerorright.indentAdditional horizontal space to insert before the first glyph of the first line of a paragraph, as a distance.
leadingAdditional space to insert between consecutive lines within a paragraph, as a distance. Defaults to 0.
line_spacingDistance between consecutive baselines in a paragraph, as a distance. Defaults to
None, which automatically calculates the tightest line spacing for each line based on the font ascent and descent.margin_leftLeft paragraph margin, as a distance.
margin_rightRight paragraph margin, as a distance.
margin_topMargin above paragraph, as a distance.
margin_bottomMargin below paragraph, as a distance. Adjacent margins do not collapse.
tab_stopsList of horizontal tab stops, as distances, measured from the left edge of the text layout. Defaults to the empty list. When the tab stops are exhausted, they implicitly continue at 50 pixel intervals.
wrapchar,word, True (default) or False. The boundaries at which to wrap text to prevent it overflowing a line. Withchar, the line wraps anywhere in the text; withwordor True, the line wraps at appropriate boundaries between words; with False the line does not wrap, and may overflow the layout width.
Other attributes can be used to store additional style information within the document; they will be ignored by the built-in text classes.
- class IncrementalTextDecorationGroup
-
scissor_area:
ClassVar[tuple[int,int,int,int]] = (0, 0, 0, 0)
-
scissor_area:
- class IncrementalTextLayout
Displayed text suitable for interactive editing and/or scrolling large documents.
Unlike
TextLayout()andScrollableTextLayout, this class generates vertex lists only for lines of text that are visible. As the document is scrolled, vertex lists are deleted and created as appropriate to keep video memory usage to a minimum and improve rendering speed.Changes to the document are quickly reflected in this layout, as only the affected line(s) are reflowed. Use
begin_update()andend_update()to further reduce the amount of processing required.The layout can also display a text selection (text with a different background color). The
Caretclass implements a visible text cursor and provides event handlers for scrolling, selecting and editing text in an incremental text layout.- Class Variables:
group_class (ClassVar[type[IncrementalTextLayoutGroup]]) – Default group used to set the state for all glyphs.
decoration_class (ClassVar[type[IncrementalTextDecorationGroup]]) – Default group used to set the state for all decorations including background colors and underlines.
- property anchor_x: Literal['left', 'center', 'right']
Horizontal anchor alignment.
This property determines the meaning of the
xcoordinate.The following values are supported:
"left"(default)The X coordinate gives the position of the left edge of the layout.
"center"The X coordinate gives the position of the center of the layout.
"right"The X coordinate gives the position of the right edge of the layout.
For the purposes of calculating the position resulting from this alignment, the width of the layout is taken to be
widthifmultilineis True andwrap_linesis True, otherwisecontent_width.
- property anchor_y: Literal['top', 'bottom', 'center', 'baseline']
Vertical anchor alignment.
This property determines the meaning of the
ycoordinate.The following values are supported:
"top"The Y coordinate gives the position of the top edge of the layout.
"center"The Y coordinate gives the position of the center of the layout.
"baseline"The Y coordinate gives the position of the baseline of the first line of text in the layout.
"bottom"(default)The Y coordinate gives the position of the bottom edge of the layout.
For the purposes of calculating the position resulting from this alignment, the height of the layout is taken to be the smallest of
heightandcontent_height.See also
content_valign.
- event_types: list = ['on_layout_update', 'on_translation_update']
- property height: int
The defined maximum height of the layout in pixels, or None.
When height is not None, it affects the positioning of the text when
anchor_yandcontent_valignare used.
- lines: list[_Line]
- property multiline: bool
Set if multiline layout is enabled.
If
multilineis False, newline and paragraph characters are ignored and text is not word-wrapped. If True, the text is word-wrapped only if thewrap_linesis True.
- property position: tuple[float, float, float]
The (X, Y, Z) coordinates of the layout, as a tuple.
- property rotation: float
Rotation will always be 0 as incremental layouts cannot be rotated.
- Raises:
NotImplementedError – Rotating IncrementalTextLayout’s is not supported.
- property selection_background_color: tuple[int, int, int, int]
Background color of active selection.
The color is an RGBA tuple with components in range [0, 255].
- property selection_color: tuple[int, int, int, int]
Text color of active selection.
The color is an RGBA tuple with components in range [0, 255].
- property selection_end: int
End position of the active selection (exclusive).
- See:
py:meth:~pyglet.text.layout.IncrementalTextLayout.set_selection
- property selection_start: int
Starting position of the active selection.
- See:
py:meth:~pyglet.text.layout.IncrementalTextLayout.set_selection
- property view_x: int
Horizontal scroll offset.
The initial value is 0, and the left edge of the text will touch the left side of the layout bounds. A positive value causes the text to “scroll” to the right. Values are automatically clipped into the range
[0, content_width - width]
- property view_y: int
Vertical scroll offset.
The initial value is 0, and the top of the text will touch the top of the layout bounds (unless the content height is less than the layout height, in which case content_valign is used).
A negative value causes the text to “scroll” upwards. Values outside of the range
[height - content_height, 0]are automatically clipped in range.
- property width: int
The defined maximum width of the layout in pixels, or None.
If multiline and wrap_lines is True, the width defines where the text will be wrapped. If multiline is False or wrap_lines is False, this property has no effect.
- property z: float
Z coordinate of the layout.
- class ScrollableTextDecorationGroup
Create a text decoration rendering group.
The group is created internally when a
Labelis created; applications usually do not need to explicitly create it.-
scissor_area:
ClassVar[tuple[int,int,int,int]] = (0, 0, 0, 0)
-
scissor_area:
- class ScrollableTextLayout
Display text in a scrollable viewport.
This class does not display a scrollbar or handle scroll events; it merely clips the text that would be drawn in
TextLayout()to the bounds of the layout given byx,y,widthandheight; and offsets the text by a scroll offset.Use
view_xandview_yto scroll the text within the viewport.- Class Variables:
group_class (ClassVar[type[ScrollableTextLayoutGroup]]) – Default group used to set the state for all glyphs.
decoration_class (ClassVar[type[ScrollableTextDecorationGroup]]) – Default group used to set the state for all decorations including background colors and underlines.
- property anchor_x: Literal['left', 'center', 'right']
Horizontal anchor alignment.
This property determines the meaning of the
xcoordinate.The following values are supported:
"left"(default)The X coordinate gives the position of the left edge of the layout.
"center"The X coordinate gives the position of the center of the layout.
"right"The X coordinate gives the position of the right edge of the layout.
For the purposes of calculating the position resulting from this alignment, the width of the layout is taken to be
widthifmultilineis True andwrap_linesis True, otherwisecontent_width.
- property anchor_y: Literal['top', 'bottom', 'center', 'baseline']
Vertical anchor alignment.
This property determines the meaning of the
ycoordinate.The following values are supported:
"top"The Y coordinate gives the position of the top edge of the layout.
"center"The Y coordinate gives the position of the center of the layout.
"baseline"The Y coordinate gives the position of the baseline of the first line of text in the layout.
"bottom"(default)The Y coordinate gives the position of the bottom edge of the layout.
For the purposes of calculating the position resulting from this alignment, the height of the layout is taken to be the smallest of
heightandcontent_height.See also
content_valign.
- property position: tuple[float, float, float]
The (X, Y, Z) coordinates of the layout, as a tuple.
- property view_x: int
Horizontal scroll offset.
The initial value is 0, and the left edge of the text will touch the left side of the layout bounds. A positive value causes the text to “scroll” to the right. Values are automatically clipped into the range
[0, content_width - width]
- property view_y: int
Vertical scroll offset.
The initial value is 0, and the top of the text will touch the top of the layout bounds (unless the content height is less than the layout height, in which case content_valign is used).
A negative value causes the text to “scroll” upwards. Values outside of the range
[height - content_height, 0]are automatically clipped in range.
- property z: float
Z coordinate of the layout.
- class ScrollableTextLayoutGroup
Default rendering group for
ScrollableTextLayout.The group maintains internal state for specifying the viewable area, and for scrolling. Because the group has internal state specific to the text layout, the group is never shared.
-
scissor_area:
ClassVar[tuple[int,int,int,int]] = (0, 0, 0, 0)
-
scissor_area:
- class TextDecorationGroup
Create a text decoration rendering group.
The group is created internally when a
Labelis created; applications usually do not need to explicitly create it.
- class TextLayout
Lay out and display documents.
This class is intended for displaying documents.
Label()andHTMLLabel()provide a convenient interface to this class.Some properties may cause the document to be recreated rather than updated. Refer to property documentation for details.
- Class Variables:
group_class (
ClassVar[type[TextLayoutGroup]]) – Default group used to set the state for all glyphs.decoration_class (
ClassVar[type[TextDecorationGroup]]) – Default group used to set the state for all decorations including background colors and underlines.
- property anchor_x: Literal['left', 'center', 'right']
Horizontal anchor alignment.
This property determines the meaning of the
xcoordinate.The following values are supported:
"left"(default)The X coordinate gives the position of the left edge of the layout.
"center"The X coordinate gives the position of the center of the layout.
"right"The X coordinate gives the position of the right edge of the layout.
For the purposes of calculating the position resulting from this alignment, the width of the layout is taken to be
widthifmultilineis True andwrap_linesis True, otherwisecontent_width.
- property anchor_y: Literal['top', 'bottom', 'center', 'baseline']
Vertical anchor alignment.
This property determines the meaning of the
ycoordinate.The following values are supported:
"top"The Y coordinate gives the position of the top edge of the layout.
"center"The Y coordinate gives the position of the center of the layout.
"baseline"The Y coordinate gives the position of the baseline of the first line of text in the layout.
"bottom"(default)The Y coordinate gives the position of the bottom edge of the layout.
For the purposes of calculating the position resulting from this alignment, the height of the layout is taken to be the smallest of
heightandcontent_height.See also
content_valign.
- property batch: Batch
The Batch that this Layout is assigned to.
If no Batch is assigned, an internal Batch is created and used.
- property bottom: float
The y-coordinate of the bottom side of the layout.
- property content_height: int
The calculated height of the text in the layout.
This is the actual height of the text in pixels, not the user defined
height.
- property content_valign: Literal['bottom', 'center', 'top']
Vertical alignment of content within larger layout box.
This property determines how content is positioned within the layout box when
content_heightis less thanheight.The following values are supported:
top(default)Content is aligned to the top of the layout box.
centerContent is centered vertically within the layout box.
bottomContent is aligned to the bottom of the layout box.
This property has no effect when
content_heightis greater thanheight(in which case the content is aligned to the top) or whenheightisNone(in which case there is no vertical layout box dimension).
- property content_width: int
Calculated width of the text in the layout.
This is the actual width of the text in pixels, not the user defined
width. The content width may overflow the layout width if word-wrapping is not possible.
- property document: AbstractDocument
Document to display.
For
IncrementalTextLayoutit is far more efficient to modify a document in-place than to replace the document instance on the layout.
- property dpi: float
Get DPI used by this layout.
- property group: Group | None
Get the Group specified by the user.
Changing a group will cause the layout to be recreated.
- property height: int | None
The defined maximum height of the layout in pixels, or None.
When height is not None, it affects the positioning of the text when
anchor_yandcontent_valignare used.
- property left: float
The x-coordinate of the left side of the layout.
- property multiline: bool
Set if multiline layout is enabled.
If
multilineis False, newline and paragraph characters are ignored and text is not word-wrapped. If True, the text is word-wrapped only if thewrap_linesis True.
- property position: tuple[float, float, float]
The (X, Y, Z) coordinates of the layout, as a tuple.
- property program: ShaderProgram
The ShaderProgram that is assigned to this Layout.
If set, the shader will impact all Glyphs. InlineElements will not be affected.
- property right: float
The x-coordinate of the right side of the layout.
- property rotation: float
Rotation of the layout in degrees. Rotated based on the anchor of the layout.
Negative values will rotate in reverse.
- property top: float
The y-coordinate of the top side of the layout.
- property visible: bool
True if the layout will be visible when drawn.
- property width: int | None
The defined maximum width of the layout in pixels, or None.
If multiline and wrap_lines is True, the width defines where the text will be wrapped. If multiline is False or wrap_lines is False, this property has no effect.
- property z: float
Z coordinate of the layout.