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

如何在Jupyter Notebook中实现Checkbox组单选并禁用其他Checkbox?

在Jupyter Notebook中用Checkbox实现单选组(保持布局一致性)

核心思路

用ipywidgets的Checkbox组件模拟单选逻辑,通过绑定回调函数,在选中某个Checkbox时禁用同组内其他选项;同时用GridBox实现多列网格布局,保证单选组和多选组的Checkbox间距完全一致。

完整代码实现

import ipywidgets as widgets
from IPython.display import display

def on_checkbox_toggle(change, checkbox_group):
    # 选中当前Checkbox时,禁用组内其他选项
    if change['new']:
        for cb in checkbox_group:
            if cb != change['owner']:
                cb.disabled = True
    # 取消选中时,恢复组内所有选项可用
    else:
        for cb in checkbox_group:
            cb.disabled = False

def create_single_select_checkbox_group(question_text, options, columns=3):
    # 创建问题标题标签
    question_label = widgets.Label(value=question_text)
    # 生成选项对应的Checkbox
    checkboxes = [widgets.Checkbox(description=opt, value=False) for opt in options]
    # 给每个Checkbox绑定回调事件
    for cb in checkboxes:
        cb.observe(lambda change, group=checkboxes: on_checkbox_toggle(change, group), names='value')
    # 用GridBox实现多列网格布局,匹配截图样式
    checkbox_grid = widgets.GridBox(
        checkboxes,
        layout=widgets.Layout(
            grid_template_columns=f"repeat({columns}, 1fr)",
            gap='10px',
            margin='10px 0'
        )
    )
    return widgets.VBox([question_label, checkbox_grid], layout=widgets.Layout(margin='20px 0'))

# --- 使用示例 ---
# 单选问题组
q1 = create_single_select_checkbox_group(
    "问题1:选择一个你常用的编程语言",
    ["Python", "Java", "C++", "JavaScript", "Go", "R"],
    columns=3
)

# 多选问题组(保持布局一致)
q2_label = widgets.Label(value="问题2:选择你熟悉的数据分析工具")
q2_checkboxes = widgets.GridBox(
    [widgets.Checkbox(description=tool) for tool in ["Pandas", "NumPy", "Matplotlib", "Seaborn", "TensorFlow"]],
    layout=widgets.Layout(grid_template_columns="repeat(3, 1fr)", gap='10px', margin='10px 0')
)
q2 = widgets.VBox([q2_label, q2_checkboxes], layout=widgets.Layout(margin='20px 0'))

# 展示所有问题
display(widgets.VBox([q1, q2]))

关键细节说明

  • 单选逻辑实现:回调函数on_checkbox_toggle监听Checkbox的value变化,选中时遍历组内其他Checkbox设置disabled=True,取消选中时恢复所有选项可用
  • 布局一致性:统一用GridBox的grid_template_columns设置列数,gap控制选项间距,确保单选组和多选组的视觉风格完全匹配
  • 可扩展性:create_single_select_checkbox_group函数支持自定义问题文本、选项列表和列数,方便快速创建多个单选问题组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:15:35