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

Jupyter Notebook中ipywidgets复选框组互斥禁用实现问询

Fixing Single-Selection Checkbox Groups in Jupyter Notebook

Got it, let's get those checkbox groups working exactly how you want—only one selected per group, with the old selection automatically unchecking when a new one is picked. Here's a straightforward, reusable solution with breakdowns:

Step-by-Step Solution

We'll create an event handler function that manages the single-selection logic, then attach it to every checkbox in each group so they know how to react when clicked.

Full Modified Code

import random
from ipywidgets import widgets, display

def on_checkbox_change(change, checkbox_group):
    # Only trigger when a checkbox is being checked (ignore uncheck actions)
    if change['new'] is True:
        # Loop through all checkboxes in the current group
        for cb in checkbox_group:
            # Uncheck any checkbox that isn't the one the user just selected
            if cb != change['owner']:
                cb.value = False

for ind in range(0,10):
    print(f'Some text {ind}')
    cb_inner = []
    a = random.randint(0,3)
    for el in range(0,3):
        cb_value = True if el == a else False
        A = widgets.Checkbox(value=cb_value, description=f'cb{el}')
        cb_inner.append(A)
    
    # Link the event handler to each checkbox in this group
    for cb in cb_inner:
        # Pass the group reference to the handler so it knows which boxes to update
        cb.observe(lambda change, group=cb_inner: on_checkbox_change(change, group), names='value')
    
    box = widgets.HBox(cb_inner)
    display(box)
    print('---'*41)

Key Details Explained

  • The Event Handler: on_checkbox_change keeps things simple:
    • It only runs when a checkbox is being checked (we don't want to uncheck everything if someone intentionally deselects a box).
    • It iterates through the entire checkbox group, unchecking any box that isn't the one the user just clicked.
  • Attaching the Handler: Using cb.observe() we tie the handler to each checkbox's value change. The group=cb_inner in the lambda is critical—it ensures each checkbox passes its own unique group to the handler, so your 10 separate groups will all work independently without cross-interference.
  • Readability Touch: I swapped the string concatenation for an f-string (f'Some text {ind}') to make the code cleaner—this is optional but a nice Pythonic improvement.

This setup makes each group of checkboxes behave like a set of radio buttons (single selection) while retaining the checkbox visual style you need.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:21:02