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
相关产品推荐
相关产品推荐

