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

如何在Python Flet应用中检测选中或聚焦的Textfield?

在Flet中检测聚焦的TextField(适配虚拟键盘)

要实现虚拟键盘同时兼容实体键盘,核心是跟踪当前处于聚焦状态的TextField,以下是具体实现方案:

核心思路

利用Flet TextField的on_focus和on_blur事件,维护一个变量记录当前聚焦的输入框实例,虚拟键盘输入时直接对这个实例进行操作即可。

代码示例

import flet as ft

def main(page: ft.Page):
    # 存储当前聚焦的TextField
    current_focused = None

    # 聚焦事件:更新当前聚焦的输入框
    def handle_focus(e):
        nonlocal current_focused
        current_focused = e.control

    # 失焦事件:如果当前聚焦的是这个输入框,就清空记录
    def handle_blur(e):
        nonlocal current_focused
        if current_focused == e.control:
            current_focused = None

    # 创建账单相关的输入框,绑定聚焦/失焦事件
    amount_field = ft.TextField(label="账单金额", on_focus=handle_focus, on_blur=handle_blur)
    item_field = ft.TextField(label="消费项目", on_focus=handle_focus, on_blur=handle_blur)
    note_field = ft.TextField(label="备注", on_focus=handle_focus, on_blur=handle_blur)

    # 虚拟键盘输入逻辑:给当前聚焦的输入框追加字符
    def add_char(char):
        if current_focused:
            current_focused.value += char
            current_focused.update()  # 刷新输入框显示

    # 虚拟键盘退格逻辑
    def backspace():
        if current_focused and current_focused.value:
            current_focused.value = current_focused.value[:-1]
            current_focused.update()

    # 构建虚拟键盘UI
    virtual_keyboard = ft.Row(
        controls=[
            ft.ElevatedButton("1", on_click=lambda e: add_char("1")),
            ft.ElevatedButton("2", on_click=lambda e: add_char("2")),
            ft.ElevatedButton("3", on_click=lambda e: add_char("3")),
            ft.ElevatedButton("退格", on_click=lambda e: backspace()),
            ft.ElevatedButton(".", on_click=lambda e: add_char(".")),
        ],
        spacing=5
    )

    page.add(amount_field, item_field, note_field, virtual_keyboard)

ft.app(target=main)

关键说明

  • 每个TextField必须绑定on_focus和on_blur事件,确保current_focused变量能实时更新。
  • 虚拟键盘操作前先判断current_focused是否存在,避免空指针错误。
  • 实体键盘输入完全不受影响,因为TextField本身原生支持实体键盘输入,两者不会冲突。
  • 调用current_focused.update()是为了让输入框的显示立即刷新,否则修改value后界面不会实时变化。

内容的提问来源于stack exchange,提问作者Sandeep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:42:12