可取消控件
一个可以通过在指定的 dismiss_direction
方向上拖动来取消的控件。当在指定方向上拖动或快速滑动时,其内容会平滑地滑出视图。
示例
可取消的列表视图条目
- Python
import flet as ft
def main(page):
def handle_dlg_action_clicked(e):
page.close(dlg)
dlg.data.confirm_dismiss(e.control.data)
dlg = ft.AlertDialog(
modal=True,
title=ft.Text("Please confirm"),
content=ft.Text("Do you really want to delete this item?"),
actions=[
ft.TextButton("Yes", data=True, on_click=handle_dlg_action_clicked),
ft.TextButton("No", data=False, on_click=handle_dlg_action_clicked),
],
actions_alignment=ft.MainAxisAlignment.CENTER,
)
def handle_confirm_dismiss(e: ft.DismissibleDismissEvent):
if e.direction == ft.DismissDirection.END_TO_START: # right-to-left slide
# save current dismissible to dialog's data, for confirmation in handle_dlg_action_clicked
dlg.data = e.control
page.open(dlg)
else: # left-to-right slide
e.control.confirm_dismiss(True)
def handle_dismiss(e):
e.control.parent.controls.remove(e.control)
page.update()
def handle_update(e: ft.DismissibleUpdateEvent):
print(
f"Update - direction: {e.direction}, progress: {e.progress}, reached: {e.reached}, previous_reached: {e.previous_reached}"
)
page.add(
ft.ListView(
expand=True,
controls=[
ft.Dismissible(
content=ft.ListTile(title=ft.Text(f"Item {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)
],
)
)
ft.app(main)
属性
background
一个控件,堆叠在 content
之后。
如果 secondary_background
也被指定,那么这个控件只会在内容被向下或向右拖动时出现。
content
由可取消控件包含的子控件。
cross_axis_end_offset
指定控件被取消后沿主轴的结束偏移量。
如果给出非零值,则控件将沿着交叉方向移动,具体取决于该值是正值还是负值。
dismiss_direction
控件可以被取消的方向。
类型值为DismissDirection
.
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
事件时调用。