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

Flet异步Telegram登录:按钮绑定函数启动时自动执行问题

问题原因及解决方案

这是Flet按钮绑定事件时的常见错误,核心问题在于你给按钮的on_click属性赋值时,直接调用了函数(加了括号()),而不是传递函数本身的引用。

错误写法示例

# 错误:启动时直接执行get_verification_code(),把返回值绑定给on_click
btn = ft.TextButton("获取验证码", on_click=get_verification_code())

正确写法(基础无参数)

直接传递函数对象,不要加括号:

# 正确:点击按钮时才会调用get_verification_code
btn = ft.TextButton("获取验证码", on_click=get_verification_code)

如果需要给异步函数传递参数

如果你的get_verification_code需要接收参数(比如手机号输入框的值),不能直接写get_verification_code(input_value),同样会导致启动时执行。这时可以用lambda来包装:

# 假设你有一个输入框phone_input
btn = ft.TextButton(
    "获取验证码",
    on_click=lambda e: asyncio.create_task(get_verification_code(phone_input.value))
)

或者如果你的Flet版本支持异步回调处理,也可以直接用异步lambda:

btn = ft.TextButton(
    "获取验证码",
    on_click=lambda e: get_verification_code(phone_input.value)
)

注:Flet会自动处理异步的on_click回调,只要函数是async def定义的即可,无需手动管理事件循环。

总结

  • 绑定事件回调时,永远传递函数本身(不带括号),而不是函数的执行结果(带括号)。
  • 需要传参数时,用lambda或functools.partial包装,避免函数提前执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:13:29