首页 > 解决方案 > 添加另一个滑块的 PySimpleGUI 按钮

问题描述

我需要向使用 PySimpleGUI 构建的控制面板添加“添加新控件组”功能。每次选择哪种类型的控件组,因此无法像此答案中描述的那样预定义如何基于 PySimple GUI 中的按钮单击显示不同的布局?(持续窗口循环)

为简洁起见,我将这里的问题一直抽象为一个按钮,每次按下它时都应该添加另一个滑块。

我尝试使用更新,window.Layout但这被拒绝了,因为它重用了现有对象。我试过了copy.deepcopy,但也失败了。

有没有办法通过从选项列表中选择来动态添加一组新的控件(多次)?

按钮应该添加另一个滑块


import PySimpleGUI as sg

s = {'range': (2,6), 'resolution': 0.2, 'default_value': 5,
     'size': (20,15), 'orientation': 'horizontal',
     'font': ('Helvetica', 8), 'enable_events': True}

layout = [[sg.Slider(**s, key='hi'), sg.Button('Add Slider')]]

window = sg.Window('wow!', layout=layout, background_color="gray",
                   size=(400, 200)) 

while True:
    event, values = window.read()
    if event is None:
        break
    print(event, values)
    if event == 'Add Slider':
        layout[0][0].Update(value=8.0 - values['hi'])
        layout.append(sg.Slider(**s))
        window.layout(layout)

错误信息:

# UserWarning: *** YOU ARE ATTEMPTING TO RESUSE AN ELEMENT IN YOUR LAYOUT! 
Once placed in a layout, an element cannot be used in another layout. ***`

标签: pythonpython-3.xuser-interfacewidgetpysimplegui

解决方案


您可以尝试使用函数吗?

def Btn():
    return sg.Slider(**s)
layout.append(Btn())

Github上的解决方案


推荐阅读