跳到主要内容

可重排列表视图

一个允许用户通过拖动手柄来重新排列其子控件的控件。

导入选项卡模块Tabs和选项卡项模块TabItem

示例

实时示例

基础示例

import flet as ft


def main(page: ft.Page):
page.title = "可重排列表视图示例"

# 主颜色是重排手柄的颜色
page.theme = page.dark_theme = ft.Theme(color_scheme=ft.ColorScheme(primary=ft.Colors.BLUE))

def handle_reorder(e: ft.OnReorderEvent):
print(f"从 {e.old_index} 重排到 {e.new_index}")

get_color = lambda i: ft.Colors.ERROR if i % 2 == 0 else ft.Colors.ON_ERROR_CONTAINER

# 水平方向
h = ft.ReorderableListView(
expand=True,
horizontal=True,
on_reorder=handle_reorder,
controls=[
ft.Container(
content=ft.Text(f"项目 {i}", color=ft.Colors.BLACK),
bgcolor=get_color(i),
margin=ft.margin.symmetric(horizontal=5, vertical=10),
width=100,
alignment=ft.alignment.center,
)
for i in range(10)
],
)

# 垂直方向
v = ft.ReorderableListView(
expand=True,
on_reorder=handle_reorder,
controls=[
ft.ListTile(
title=ft.Text(f"项目 {i}", color=ft.Colors.BLACK),
leading=ft.Icon(ft.Icons.CHECK, color=ft.Colors.RED),
bgcolor=get_color(i),
)
for i in range(10)
],
)

page.add(h, v)


ft.app(main)

属性

anchor

零滚动偏移的相对位置。

默认为0.0

auto_scroller_velocity_scalar

每像素滚动的速度标量。它表示速度如何随滚动距离缩放。自动滚动速度 =(滚动过度距离)*速度标量。

build_controls_on_demand

controls是否应该按需/懒惰地构建,即仅在它们即将变为可见时构建。

在处理大量控件时,这特别有用。

默认为True

cache_extent

视口在可见区域之前和之后有一个区域,用于缓存当用户滚动时即将变为可见的项目。

落在这个缓存区域中的项目即使尚未在屏幕上可见也会被布局。cache_extent描述了缓存区域在视口前缘之前和后缘之后延伸多少像素。

视口将尝试用子控件覆盖的总范围是前缘之前的cache_extent+主轴范围+后缘之后的cache_extent

缓存区域也用于在 iOS 上实现隐式辅助功能滚动:当辅助功能焦点从可见视口中的项目移动到缓存区域中的不可见项目时,框架将通过(隐式)滚动操作将该项目带入视图。

controls

要重新排序的控件。

clip_behavior

内容将根据此选项进行裁剪(或不裁剪)。

值的类型为 ClipBehavior,默认为ClipBehavior.HARD_EDGE

first_item_prototype

如果第一个项目的尺寸应作为所有其他项目的“原型”,即它们的高度或宽度将与第一个项目相同,则为True

默认为False

一个不可重排的页脚项目,显示在controls之后。

值的类型为Control

一个不可重排的页眉项目,显示在controls之前。

值的类型为Control

horizontal

controls是否应水平布局。

默认为False

item_extent

如果不为空,强制子控件在滚动方向上具有给定的范围。

指定item_extent比让子控件确定自己的范围更有效,因为滚动机制可以利用对子控件范围的预知来节省工作,例如当滚动位置急剧变化时。

padding

用于插入controls的空间量。

值的类型为 Padding

事件

on_reorder

当子控件被拖动到列表中的新位置并且应用程序应更新项目顺序时触发。

on_reorder_end

当拖动的项目被放下时触发。

on_reorder_start

当项目拖动开始时触发。

事件处理程序参数的类型为 OnReorderEvent