The Row
widget in Flet is a control that arranges its children horizontally. It provides various customization options, including spacing, alignment, wrapping, and expansion capabilities. This guide will explore its properties and methods with practical examples.
Basic Usage
To create a horizontal layout, use the Row
widget and pass a list of controls as its children:
import flet as ft
def main(page: ft.Page):
row = ft.Row(
controls=[
ft.Text("Item 1"),
ft.Text("Item 2"),
ft.Text("Item 3"),
]
)
page.add(row)
ft.app(main)
Adjusting Spacing
Use the spacing
property to modify the gap between child elements:
import flet as ft
def main(page: ft.Page):
def items(count):
return [
ft.Container(
content=ft.Text(str(i)),
alignment=ft.alignment.center,
width=50,
height=50,
bgcolor=ft.Colors.AMBER,
border_radius=ft.border_radius.all(5),
) for i in range(1, count + 1)
]
def gap_slider_change(e):
row.spacing = int(e.control.value)
row.update()
gap_slider = ft.Slider(
min=0,
max=50,
divisions=50,
value=0,
label="{value}",
on_change=gap_slider_change,
)
row = ft.Row(spacing=0, controls=items(10))
page.add(ft.Column([ft.Text("Spacing between items"), gap_slider]), row)
ft.app(main)
Wrapping Items
The wrap
property allows items to move to the next line if they exceed the available space:
import flet as ft
def main(page: ft.Page):
def items(count):
return [
ft.Container(
content=ft.Text(str(i)),
alignment=ft.alignment.center,
width=50,
height=50,
bgcolor=ft.Colors.AMBER,
border_radius=ft.border_radius.all(5),
) for i in range(1, count + 1)
]
def slider_change(e):
row.width = float(e.control.value)
row.update()
width_slider = ft.Slider(
min=0,
max=page.window.width,
divisions=20,
value=page.window.width,
label="{value}",
on_change=slider_change,
)
row = ft.Row(
wrap=True,
spacing=10,
run_spacing=10,
controls=items(30),
width=page.window.width,
)
page.add(
ft.Column([
ft.Text("Change the row width to see wrapping in action:"),
width_slider,
]),
row,
)
ft.app(main)
Horizontal Alignments
The alignment
property defines how children are positioned along the horizontal axis:
import flet as ft
def main(page: ft.Page):
def items(count):
return [
ft.Container(
content=ft.Text(str(i)),
alignment=ft.alignment.center,
width=50,
height=50,
bgcolor=ft.Colors.AMBER_500,
) for i in range(1, count + 1)
]
def row_with_alignment(align: ft.MainAxisAlignment):
return ft.Column([
ft.Text(str(align), size=16),
ft.Container(content=ft.Row(items(3), alignment=align), bgcolor=ft.Colors.AMBER_100),
])
page.add(
row_with_alignment(ft.MainAxisAlignment.START),
row_with_alignment(ft.MainAxisAlignment.CENTER),
row_with_alignment(ft.MainAxisAlignment.END),
row_with_alignment(ft.MainAxisAlignment.SPACE_BETWEEN),
row_with_alignment(ft.MainAxisAlignment.SPACE_AROUND),
row_with_alignment(ft.MainAxisAlignment.SPACE_EVENLY),
)
ft.app(main)
Vertical Alignment
Use vertical_alignment
to control the positioning of items along the vertical axis:
import flet as ft
def main(page: ft.Page):
def items(count):
return [
ft.Container(
content=ft.Text(str(i)),
alignment=ft.alignment.center,
width=50,
height=50,
bgcolor=ft.Colors.AMBER_500,
) for i in range(1, count + 1)
]
def row_with_vertical_alignment(align: ft.CrossAxisAlignment):
return ft.Column([
ft.Text(str(align), size=16),
ft.Container(
content=ft.Row(items(3), vertical_alignment=align),
bgcolor=ft.Colors.AMBER_100,
height=150,
),
])
page.add(
row_with_vertical_alignment(ft.CrossAxisAlignment.START),
row_with_vertical_alignment(ft.CrossAxisAlignment.CENTER),
row_with_vertical_alignment(ft.CrossAxisAlignment.END),
)
ft.app(main)
Expanding Children
Use the expand
property to make a child control fill the available space:
r = ft.Row([
ft.TextField(hint_text="Enter your name", expand=True),
ft.ElevatedButton(text="Join chat")
])
With numeric expand factors:
r = ft.Row([
ft.Container(expand=1, content=ft.Text("A")),
ft.Container(expand=3, content=ft.Text("B")),
ft.Container(expand=1, content=ft.Text("C"))
])
Summary of Row
Properties
-
alignment
: Controls horizontal alignment (default:MainAxisAlignment.START
). -
spacing
: Sets space between children (default:10
). -
wrap
: Enables wrapping if needed. -
run_spacing
: Controls space between wrapped rows. -
scroll
: Enables horizontal scrolling. -
expand
: Allows children to fill available space. -
vertical_alignment
: Controls vertical placement (default:CrossAxisAlignment.START
).
By leveraging these properties, you can create dynamic and responsive layouts in Flet!
Copyright Statement: Unless stated otherwise, all articles are original to this site, please credit the source when sharing.
Article link:http://pybeginners.com/python-flet/understanding-the-row-widget-in-flet/
License Agreement:Attribution-NonCommercial 4.0 International License