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

如何在PySimpleGUI中选择Facet类型后动态添加参数输入框?

实现PySimpleGUI动态添加参数输入框

完整代码实现

import PySimpleGUI as sg

Facets = {
    'Entity'        : {'facet_type': 'Entity'        , 'facet_parameters': ['IFC Class'   , 'Predefined Type']},
    'Attribute'     : {'facet_type': 'Attribute'     , 'facet_parameters': ['Name'        , 'Value']},
    'Classification': {'facet_type': 'Classification', 'facet_parameters': ['System'      , 'Value']},
    'Property'      : {'facet_type': 'Property'      , 'facet_parameters': ['Property Set', 'Name', 'Value']},
    'Material'      : {'facet_type': 'Material'      , 'facet_parameters': ['Value']},
    'Parts'         : {'facet_type': 'Parts'         , 'facet_parameters': ['Entity'      , 'Relationship']}
}

# 初始布局:添加参数容器
layout = [
    [sg.Text('All elements of'), 
     sg.Combo(sorted(Facets.keys()), key='-FACET-', enable_events=True)],
    # 预留参数输入区域的容器
    [sg.Column([], key='-PARAMS_CONTAINER-', expand_x=True)]
]

window = sg.Window('IDS', layout, resizable=True)

while True:
    event, values = window.read()
    
    if event == sg.WINDOW_CLOSED:
        break
    elif event == '-FACET-':
        selected_facet = values['-FACET-']
        facet_parameters = Facets[selected_facet]['facet_parameters']
        
        # 清空之前的参数输入元素
        window['-PARAMS_CONTAINER-'].update([])
        
        # 生成新的参数输入行
        param_layout = []
        for idx, param_name in enumerate(facet_parameters):
            # 给每个输入框设置唯一key,方便后续取值
            param_layout.append([
                sg.Text(f'{param_name}:'),
                sg.Input(key=f'-PARAM_{idx}-', expand_x=True)
            ])
        
        # 将新布局添加到容器中
        window.extend_layout(window['-PARAMS_CONTAINER-'], param_layout)
        # 刷新窗口以显示新元素
        window.refresh()

window.close()

关键步骤说明

  • 预留容器:初始布局中添加一个空的sg.Column作为参数输入的承载容器,通过唯一key定位。
  • 清空旧元素:每次切换facet类型时,调用window['-PARAMS_CONTAINER-'].update([])清空容器内所有旧元素,避免重复叠加。
  • 生成新布局:遍历选中facet的参数列表,为每个参数生成包含标签和输入框的行,每个输入框设置唯一key,方便后续获取用户输入值。
  • 扩展布局:使用window.extend_layout()方法将新生成的参数行添加到容器中,最后调用window.refresh()刷新窗口,让新元素立即显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:35:14