拖放
Flet 中的拖放机制非常简单 - 用户开始拖动 Draggable
控件,然后将其“放置”在 DragTarget
上。如果 draggable 和 drag target 具有相同的 group
,则 drag target 将调用 on_accept
事件处理程序,并将 draggable 控件 ID 作为事件数据传递。在这种情况下,draggable serves 作为拖放操作的源“数据”。
让我们看一下以下示例。在下面的程序中,您可以将左侧控件(显示“1”)拖放到右侧控件(显示“0”)上,并在拖放操作完成后,左侧控件将被替换为“0”,右侧控件将变为“1”:
import flet as ft
def main(page: ft.Page):
page.title = "拖放示例"
def drag_accept(e):
# 获取 draggable(源)控件 by its ID
src = page.get_control(e.src_id)
# 更新 draggable 控件中的文本
src.content.content.value = "0"
# 更新 drag target 控件中的文本
e.control.content.content.value = "1"
page.update()
page.add(
ft.Row(
[
ft.Draggable(
group="number",
content=ft.Container(
width=50,
height=50,
bgcolor=ft.Colors.CYAN_200,
border_radius=5,
content=ft.Text("1", size=20),
alignment=ft.alignment.center,
),
),
ft.Container(width=100),
ft.DragTarget(
group="number",
content=ft.Container(
width=50,
height=50,
bgcolor=ft.Colors.PINK_200,
border_radius=5,
content=ft.Text("0", size=20),
alignment=ft.alignment.center,
),
on_accept=drag_accept,
),
]
)
)
ft.app(target=main)
