Note
Go to the end to download the full example code.
Text justification
Example demonstrating the capabilities of text to be aligned and justified according to the user’s decision.
This demo enables one to interactively control the alignment and the justification of text anchored to the center of the screen.
from wgpu.gui.auto import WgpuCanvas, run
import pygfx as gfx
scene = gfx.Scene()
scene.add(gfx.Background.from_color("#fff", "#000"))
text = (
" \n \n\n" # Some newlines and spaces before the text starts.
" Lorem ipsum\n" # Some space at the very beginning of the line
"Bonjour World Olá\n" # some text that isn't equal in line
"py gfx\n" # a line with exactly 1 word (with a non breaking space inside)
"last line \n" # a line with some space at the end
"\n \n\n" # Some newlines and space at the end
)
font_size = 20
text_bottom_right = gfx.Text(
gfx.TextGeometry(
text=text,
font_size=font_size,
screen_space=True,
text_align="right",
anchor="bottom-right",
),
gfx.TextMaterial(color="#DA9DFF", outline_color="#000", outline_thickness=0.15),
)
text_top_right = gfx.Text(
gfx.TextGeometry(
text=text,
font_size=font_size,
screen_space=True,
text_align="right",
anchor="top-right",
),
gfx.TextMaterial(color="#FFA99D", outline_color="#000", outline_thickness=0.15),
)
text_bottom_left = gfx.Text(
gfx.TextGeometry(
text=text,
font_size=font_size,
screen_space=True,
text_align="left",
anchor="bottom-left",
),
gfx.TextMaterial(color="#C2FF9D", outline_color="#000", outline_thickness=0.15),
)
text_top_left = gfx.Text(
gfx.TextGeometry(
text=text,
font_size=font_size,
screen_space=True,
text_align="left",
anchor="top-left",
),
gfx.TextMaterial(color="#9DF3FF", outline_color="#000", outline_thickness=0.15),
)
points = gfx.Points(
gfx.Geometry(positions=[(0, 0, 0)]),
gfx.PointsMaterial(color="#f00", size=10),
)
scene.add(
text_bottom_right,
text_top_right,
text_bottom_left,
text_top_left,
points,
)
camera = gfx.OrthographicCamera(4, 3)
renderer = gfx.renderers.WgpuRenderer(WgpuCanvas(size=(800, 600)))
renderer.request_draw(lambda: renderer.render(scene, camera))
if __name__ == "__main__":
run()
Total running time of the script: (0 minutes 0.542 seconds)