Skip to main content

MenuBar

A menu bar that manages cascading child menus.

It could be placed anywhere but typically resides above the main body of the application and defines a menu system for invoking callbacks in response to user selection of a menu item.

Examples

Live example

import flet as ft

def main(page: ft.Page):
page.theme_mode = ft.ThemeMode.LIGHT
appbar_text_ref = ft.Ref[ft.Text]()

def handle_menu_item_click(e):
print(f"{e.control.content.value}.on_click")
page.show_snack_bar(ft.SnackBar(content=ft.Text(f"{e.control.content.value} was clicked!")))
appbar_text_ref.current.value = e.control.content.value
page.update()

def handle_on_open(e):
print(f"{e.control.content.value}.on_open")

def handle_on_close(e):
print(f"{e.control.content.value}.on_close")

def handle_on_hover(e):
print(f"{e.control.content.value}.on_hover")

page.appbar = ft.AppBar(
title=ft.Text("Menus", ref=appbar_text_ref),
center_title=True,
bgcolor=ft.colors.BLUE
)

menubar = ft.MenuBar(
expand=True,
style=ft.MenuStyle(
alignment=ft.alignment.top_left,
bgcolor=ft.colors.RED_100,
mouse_cursor={ft.MaterialState.HOVERED: ft.MouseCursor.WAIT,
ft.MaterialState.DEFAULT: ft.MouseCursor.ZOOM_OUT},
),
controls=[
ft.SubmenuButton(
content=ft.Text("File"),
on_open=handle_on_open,
on_close=handle_on_close,
on_hover=handle_on_hover,
controls=[
ft.MenuItemButton(
content=ft.Text("About"),
leading=ft.Icon(ft.icons.INFO),
style=ft.ButtonStyle(bgcolor={ft.MaterialState.HOVERED: ft.colors.GREEN_100}),
on_click=handle_menu_item_click
),
ft.MenuItemButton(
content=ft.Text("Save"),
leading=ft.Icon(ft.icons.SAVE),
style=ft.ButtonStyle(bgcolor={ft.MaterialState.HOVERED: ft.colors.GREEN_100}),
on_click=handle_menu_item_click
),
ft.MenuItemButton(
content=ft.Text("Quit"),
leading=ft.Icon(ft.icons.CLOSE),
style=ft.ButtonStyle(bgcolor={ft.MaterialState.HOVERED: ft.colors.GREEN_100}),
on_click=handle_menu_item_click
)
]
),
ft.SubmenuButton(
content=ft.Text("View"),
on_open=handle_on_open,
on_close=handle_on_close,
on_hover=handle_on_hover,
controls=[
ft.SubmenuButton(
content=ft.Text("Zoom"),
controls=[
ft.MenuItemButton(
content=ft.Text("Magnify"),
leading=ft.Icon(ft.icons.ZOOM_IN),
close_on_click=False,
style=ft.ButtonStyle(bgcolor={ft.MaterialState.HOVERED: ft.colors.PURPLE_200}),
on_click=handle_menu_item_click
),
ft.MenuItemButton(
content=ft.Text("Minify"),
leading=ft.Icon(ft.icons.ZOOM_OUT),
close_on_click=False,
style=ft.ButtonStyle(bgcolor={ft.MaterialState.HOVERED: ft.colors.PURPLE_200}),
on_click=handle_menu_item_click
)
]
)
]
),
]
)

page.add(
ft.Row([menubar]),
)


ft.app(target=main)

Properties

clip_behavior

Whether to clip the content of this control or not. Property value is ClipBehavior enum.

Defaults to NONE.

controls

The list of menu items that are the top level children of the MenuBar.

style

The value is an instance of MenuStyle class.