如何在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
相关产品推荐
相关产品推荐

