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

Flet技术问询:如何在值变更/首次点击后禁用复选框或按钮

Flet控件禁用场景实现方案

1. 在选择/值变更时禁用按钮/复选框

Flet中所有控件都自带enabled属性,将其设为False即可禁用控件(灰化、无法交互)。你可以在控件的on_change或on_click事件中,根据值的变化切换该属性。

示例:复选框选中后禁用自身

def strike_text(e, text):
    if e.control.value is True:
        # 设置文本删除线(使用Flet原生样式)
        text.style = ft.TextStyle(decoration=ft.TextDecoration.LINE_THROUGH)
        # 禁用当前复选框
        e.control.enabled = False
        # 强制更新控件状态,确保界面同步
        e.control.update()

# 绑定复选框事件
ft.Checkbox(on_change=lambda e: strike_text(e, text))

示例:值变更时禁用其他按钮

def toggle_button_state(e, btn):
    # 复选框选中时禁用按钮,取消选中时恢复可用
    btn.enabled = not e.control.value
    btn.update()

checkbox = ft.Checkbox(label="勾选禁用操作按钮")
operate_btn = ft.ElevatedButton(text="执行操作")
checkbox.on_change = lambda e: toggle_button_state(e, operate_btn)

2. 实现复选框首次点击后禁用

这个需求核心是复选框第一次被选中时立即禁用自身,逻辑和上述场景一致:在on_change事件中判断控件值为True时,设置enabled=False即可。首次点击后复选框进入选中状态并被禁用,后续无法再切换状态。

完整可运行示例

import flet as ft

def main(page: ft.Page):
    target_text = ft.Text("待处理文本")

    def handle_check(e):
        if e.control.value:
            # 添加文本删除线
            target_text.style = ft.TextStyle(decoration=ft.TextDecoration.LINE_THROUGH)
            # 禁用当前复选框
            e.control.enabled = False
            # 更新控件状态
            e.control.update()
            target_text.update()

    page.add(
        ft.Checkbox(label="点击后禁用并添加删除线", on_change=handle_check),
        target_text
    )

if __name__ == "__main__":
    ft.app(target=main)

关键说明

  • e.control指代触发事件的当前控件(即复选框),直接修改它的enabled属性就能完成禁用。
  • 修改属性后调用update()是为了确保界面立即同步状态,避免出现延迟或不更新的情况。
  • 如果你使用自定义的Style.striked_text样式,直接替换示例中的TextStyle部分即可,不影响禁用逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:52:40