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

如何用ipywidgets创建可滚动的VBox按钮列表?

解决ipywidgets VBox滚动时按钮被挤压的问题

问题根源在于VBox默认采用flex布局,当容器设置固定高度后,子元素(按钮)会被自动压缩以适配容器空间,最终导致按钮变形。只需给每个按钮添加布局属性,禁止它们被压缩,就能让VBox正常显示滚动条,同时按钮保持原有大小。

修改后的代码:

import ipywidgets as widgets
from IPython.display import display

# 初始化带滚动属性的VBox
vbox = widgets.VBox(layout=widgets.Layout(height='100px', overflow_y='scroll'))

num_buttons = 20
# 给每个按钮添加布局属性,避免被压缩
button_list = [
    widgets.Button(
        description=f'Button {i+1}',
        layout=widgets.Layout(flex='0 0 auto')  # 核心设置:禁止按钮被压缩或扩展
    ) 
    for i in range(num_buttons)
]

vbox.children = button_list  # 直接批量赋值子元素,比逐个追加更高效
display(vbox)

关键说明:

  • flex='0 0 auto' 三个值分别对应:
    • flex-grow: 0:按钮不会自动扩展填充容器剩余空间
    • flex-shrink: 0:按钮不会被压缩来适配容器高度
    • flex-basis: auto:按钮保持自身的固有高度
  • 直接将button_list赋值给vbox.children,比循环逐个追加子元素的写法更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:07:18