You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flet中多行TextField如何自动滚动至末尾位置?

Flet中多行TextField如何自动滚动至末尾位置?

嘿,我之前也踩过这个坑!你现在碰到的情况太常见了——把新内容追加到多行TextField末尾时,控件明明更新了内容,却不会自动滚动到最新的那一行,得手动拉滚动条才能看到,特别麻烦。

其实解决方法很简单,只需要在更新内容后,让TextField“聚焦”到文本的末尾位置就行,具体改法看下面的代码:

# 初始化TextField的代码不变
txt_salida = ft.TextField(
    multiline=True, 
    min_lines=10, 
    max_lines=10, 
    expand=True, 
    read_only=True, 
    filled=True
)

# 新内容追加到末尾的代码修改如下
txt_salida.value = txt_salida.value + f'{valor}\n'
# 将选中范围设置为文本的末尾位置,触发自动滚动
txt_salida.selection_start = len(txt_salida.value)
txt_salida.selection_end = len(txt_salida.value)
page.update()

原理也很好理解:当你把选中的起始和结束位置都设为文本的总长度时,Flet会自动把TextField的滚动区域调整到选中的位置,也就是文本的最末尾。而且因为你的TextField是只读状态,用户完全看不到选中的高亮效果,一点都不影响使用体验。

如果这个方法偶然失效,你还可以试试先调用txt_salida.focus(),再设置选中位置,不过一般来说上面的方法就足够解决问题啦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 07:24:33