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

Python基于DataFrame智能批量生成多组输入框的实现方法

ipywidgets批量生成多行产品输入表单实现方案

核心逻辑:不要为每行控件单独定义硬编码变量,通过循环按行索引生成控件,用列表/字典存储控件引用,最后统一组装布局即可,生成效果和逐行硬编码完全一致


完整实现代码

import ipywidgets as ipw

# 存储所有行的HBox组件,最后用于组装完整表单
all_rows = []
# 存储每一行的控件引用,方便后续读取用户输入值
row_widgets = []

# 遍历所有产品记录,自动生成每一行的输入控件
for idx in range(len(barrier_list)):
    # 生成当前行的产品选择下拉框
    product = ipw.Dropdown(
        options=barrier_list['Product Name'],
        value = barrier_list['Product Name'][idx],
        description= barrier_list['ISIN'][idx],
        disabled=False,
        layout = {'width':'350px'}
    )
    product.style.description_width = 'initial'

    # 生成当前行的Units输入框
    units = ipw.IntText(
        value=for_table['Units'][idx],
        description='Units:',
        disabled=False,
        layout = {'width':'200px'}
    )

    # 生成当前行的Price输入框
    price = ipw.FloatText(
        value=for_table['Price'][idx],
        description='Price:',
        disabled=False,
        layout = {'width':'200px'}
    )

    # 生成当前行的Value输入框
    value = ipw.FloatText(
        value=0,
        description='Value:',
        disabled=False,
        layout = {'width':'200px'}
    )

    # 组装当前行的水平布局
    row_hbox = ipw.HBox([product, units, price, value])
    
    # 将当前行加入总容器
    all_rows.append(row_hbox)
    # 存储当前行所有控件的引用
    row_widgets.append({
        'product': product,
        'units': units,
        'price': price,
        'value': value
    })

# 组装为垂直布局的完整表单,调用display即可渲染
full_form = ipw.VBox(all_rows)
display(full_form)

表单使用与取值

  • 代码运行后会直接渲染出全部30行输入控件,布局、默认值和你逐行硬编码的效果完全一致
  • 后续读取用户输入不需要查找product_1/units_1这类独立变量,直接遍历提前存储的row_widgets列表即可,示例代码:
# 读取所有行的输入值,组装为结构化结果
result = []
for idx, widgets in enumerate(row_widgets):
    row_data = {
        'ISIN': barrier_list['ISIN'][idx],
        'selected_product': widgets['product'].value,
        'input_units': widgets['units'].value,
        'input_price': widgets['price'].value,
        'input_value': widgets['value'].value
    }
    result.append(row_data)

可选优化项

  • 若表单过长需要滚动显示,给VBox添加滚动布局即可:
    full_form = ipw.VBox(all_rows, layout={'height': '600px', 'overflow': 'auto'})
  • 若需要实现「输入Units和Price后自动计算Value」的联动效果,直接在循环内给units、price控件绑定change事件即可,不需要逐行重复写绑定逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:36:17