Кнопка PySimpleGUI, которая добавляет еще один слайдер

Мне нужна функция «добавить новую группу элементов управления» в панель управления, созданную с помощью PySimpleGUI. Каждый раз выбирается тип группы элементов управления, поэтому ее нельзя предопределить аналогично тому, как описано в этот ответ на Как отображать различные макеты на основе нажатий кнопок в графическом интерфейсе PySimple? (Постоянный цикл окна)

Для краткости я абстрагировался от проблемы до кнопки, которая должна добавлять ползунок при каждом нажатии.

Я пытался обновить, используя 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. ***`

person uhoh    schedule 28.03.2020    source источник


Ответы (1)


Не могли бы вы попробовать использовать функцию?

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

Решение на Github

person JustLearnedIt    schedule 28.03.2020
comment
Как это поможет? - person uhoh; 28.03.2020
comment
Я искал вашу ошибку, и на github были люди, у которых была такая же проблема. Кто-то написал функцию, которая ему помогла. Добавлю ссылку. - person JustLearnedIt; 29.03.2020
comment
О, это здорово! Пожалуйста, свяжитесь со мной еще раз, когда вы это сделаете; Я выхожу сейчас, но вернусь позже. Спасибо! - person uhoh; 29.03.2020
comment
@uhoh вот твой пинг - person JustLearnedIt; 29.03.2020
comment
Спасибо, я не уверен, что объяснение совместимо там, где эффект одного элемента управления должен заключаться в добавлении дополнительных элементов управления в макет, как я пытаюсь сделать здесь. Трудно следить за этим потоком, потому что он охватывает год и несколько версий, и я не вижу, где можно найти окончательный рабочий код. Но я попробую кое-что в этом роде. - person uhoh; 30.03.2020
comment
Пример сценария в верхней части этого потока также не запускается по другим причинам. У меня версия 4.17, и я получаю AttributeError: module 'PySimpleGUI' has no attribute 'GetPathBox', что комментарий к функции относится к версии 4.4, а сценарий был написан для запуска в 4.1. - person uhoh; 30.03.2020