如何在Flet的TextField中设置光标位置?
在Flet TextField中设置光标位置
Flet的TextField确实没有直接的cursor_position属性,但可以通过**selection_start和selection_end**两个属性实现光标定位——只要将这两个值设为相同的索引,光标就会停在对应位置。
实现方法
- 先创建TextField实例,不要在构造函数内直接设置光标相关属性(此时控件未完成初始化,设置可能不生效)
- 在控件挂载完成后(比如页面
on_load事件、控件did_mount生命周期方法),设置selection_start和selection_end为目标位置 - 调用
page.update()刷新界面生效
修改后的示例代码
import flet as ft class MyApp(ft.UserControl): def build(self): self.text_field = ft.TextField( label="", value="|", max_lines=6, min_lines=6, expand=True, bgcolor='#8FBF62', color=ft.colors.BLACK, disabled=False, text_size=25, cursor_width=2, cursor_color=ft.colors.BLACK, keyboard_type=ft.KeyboardType.NONE, autofocus=True, on_change=self.set_cur ) return self.text_field def did_mount(self): # 控件挂载后,将光标定位到文本末尾(当前value为"|",目标索引为1) target_pos = len(self.text_field.value) self.text_field.selection_start = target_pos self.text_field.selection_end = target_pos self.page.update() def set_cur(self, e): # 文本变化时,可重新定位光标(示例为保持在末尾) target_pos = len(e.control.value) e.control.selection_start = target_pos e.control.selection_end = target_pos self.page.update() def main(page: ft.Page): page.add(MyApp()) if __name__ == "__main__": ft.app(target=main)
关键说明
autofocus=True仅负责让TextField自动获取焦点,不会改变默认的光标起始位置,必须配合selection_*属性实现自定义定位- 若要定位到任意位置,直接修改
target_pos的数值即可(比如设为0定位到开头,设为2定位到文本第3个字符前)
内容的提问来源于stack exchange,提问作者fsalazar_sch
相关产品推荐
相关产品推荐

