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

如何在Flet的TextField中设置光标位置?

在Flet TextField中设置光标位置

Flet的TextField确实没有直接的cursor_position属性,但可以通过**selection_start和selection_end**两个属性实现光标定位——只要将这两个值设为相同的索引,光标就会停在对应位置。

实现方法

  1. 先创建TextField实例,不要在构造函数内直接设置光标相关属性(此时控件未完成初始化,设置可能不生效)
  2. 在控件挂载完成后(比如页面on_load事件、控件did_mount生命周期方法),设置selection_start和selection_end为目标位置
  3. 调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:05:00