可取消控件
一个可以通过在指定的 dismiss_direction
方向上拖动来取消的控件。当在指定方向上拖动或快速滑动时,其内容会平滑地滑出视图。
示例
可取消的列表视图条目
- Python
import flet as ft
def main(page):
page.window_height, page.window_width = 500, 400
def close_yes_dlg(e):
page.close_dialog()
dlg.data.confirm_dismiss(True)
def close_no_dlg(e):
page.close_dialog()
dlg.data.confirm_dismiss(False)
dlg = ft.AlertDialog(
modal=True,
title=ft.Text("请确认"),
content=ft.Text("您确定要删除此项目吗?"),
actions=[
ft.TextButton("是", on_click=close_yes_dlg),
ft.TextButton("否", on_click=close_no_dlg),
],
actions_alignment=ft.MainAxisAlignment.CENTER,
)
def handle_confirm_dismiss(e: ft.DismissibleDismissEvent):
if e.direction == ft.DismissDirection.END_TO_START: # 右滑删除
# 保存当前的可取消控件到对话框的数据中
dlg.data = e.control
page.show_dialog(dlg)
else: # 左滑删除
e.control.confirm_dismiss(True)
def handle_dismiss(e):
lv.controls.remove(e.control)
page.update()
def handle_update(e: ft.DismissibleUpdateEvent):
print(f"更新 - 方向: {e.direction}, 进度: {e.progress}, 达到: {e.reached}, 之前达到: {e.previous_reached}")
page.add(
lv := ft.ListView(
controls=[
ft.Dismissible(
content=ft.ListTile(title=ft.Text(f"项目 {i}")),
dismiss_direction=ft.DismissDirection.HORIZONTAL,
background=ft.Container(bgcolor=ft.colors.GREEN),
secondary_background=ft.Container(bgcolor=ft.colors.RED),
on_dismiss=handle_dismiss,
on_update=handle_update,
on_confirm_dismiss=handle_confirm_dismiss,
dismiss_thresholds={
ft.DismissDirection.END_TO_START: 0.2,
ft.DismissDirection.START_TO_END: 0.2,
},
)
for i in range(10)
],
expand=True,
)
)
ft.app(main)
属性
background
一个控件,堆叠在 content
之后。
如果 secondary_background
也被指定,那么这个控件只会在内容被向下或向右拖动时出现。
content
由可取消控件包含的子控件。
cross_axis_end_offset
指定控件被取消后沿主轴的结束偏移量。
如果给出非零值,则控件将沿着交叉方向移动,具体取决于该值是正值还是负值。
dismiss_direction
控件可以被取消的方向。使用 DismissDirection
枚举进行指定:
DismissDirection.NONE
DismissDirection.VERTICAL
DismissDirection.HORIZONTAL
DismissDirection.END_TO_START
DismissDirection.START_TO_END
DismissDirection.UP
DismissDirection.DOWN
dismiss_thresholds
控件被认为已取消之前必须拖动的偏移阈值。
例如:阈值为 0.4
(默认值)意味着项目必须至少被拖动 40% 才能被认为已取消。
它以字典的形式指定,其中键是 DismissDirection
类型,值是阈值(介于 0.0
和 1.0
之间的小数值):
ft.Dismissible(
# ...
dismiss_thresholds={
ft.DismissDirection.VERTICAL: 0.1,
ft.DismissDirection.START_TO_END: 0.7
}
)
movement_duration
控件取消或未取消时返回原位的持续时间。
resize_duration
控件在 on_dismiss
被调用之前收缩的时间。
secondary_background
一个控件,堆叠在 content
之后,当 content
被向上或向左拖动时会显示。只有在 background
也被指定时才可以指定此属性。
事件
on_confirm_dismiss
在取消操作即将完成时给应用程序一个确认或否决的机会。在解决此待定的取消操作之前,控件不能再次被拖动。
要解决待定的取消操作,请调用 confirm_dismiss(dismiss)
方法,并传递一个表示决定的布尔值。如果为 True
,则控件将被取消,否则将返回到原始位置。
请参见页面顶部的示例以了解可能的实现方式。
on_dismiss
在控件被取消后触发,完成调整大小之后。
on_resize
在控件大小变化时触发,例如在取消之前收缩时。
on_update
在控件被拖动时触发。
方法
confirm_dismiss(dismiss: bool)
解决待定的取消操作。在处理 on_confirm_dismiss
事件时调用。