Можно ли обновить PySimpleGUI InputOptionMenu?

Я хочу обновить значения меню параметров ввода PySimpleGUI. Следующее изначально присваивает содержимое списка "имен" списку. Это перезаписывается, когда назначается список 'new_values'. Таким образом, нет проблем с обновлением Listbox, но элемент Input Option Menu не обновляется.

import PySimpleGUI as sg

names = ['Roberta', 'Kylie']

layout = [[sg.Listbox(names, size=(20, 4), key='_LIST_')],
          [sg.InputOptionMenu(names, size=(20, 4), key='_LIST_')]]

window = sg.Window('').Layout(layout).Finalize()

new_values = ['Bill', 'Jeff']
window.Element('_LIST_').Update(new_values)

while True:
    event, values = window.Read()
    if event is None or event == 'Exit':
        break

window.Close()

Я ожидаю, что оба элемента будут обновлены до Билла и Джеффа. Список есть, но Input Option Menu показывает Роберту и Кайли.

1 ответ

Вы действительно можете обновить до новых значений. У вас есть параметр в вызове обновления не по порядку. Первый параметр, value устанавливает текущее значение Второй параметр, values это то, что вам нужно.

Исправление заключается в добавлении имени параметра к вашему вызову:

window.Element('_LIST_').Update(values=new_values)

Кроме того, вы не должны называть 2 ключа одинаковыми. Они должны быть уникальными среди макета. Я бы назвал другой _OPTIONS_ Или что-то вдоль этих линий.

В коде обновления для меню параметров была ошибка, которая была исправлена ​​и проверена в GitHub. Исправление было загружено в PyPI как версия 3.27.

Вот ваш код, переработанный и протестированный с использованием новейшего кода PySimpleGUI. Я включил дополнительный параметр в вызов OptionMenu.Update, чтобы показать вам, как явно установить

import PySimpleGUI as sg

names = ['Roberta', 'Kylie']

layout = [[sg.Listbox(names, size=(20, 4), key='_LIST_')],
          [sg.OptionMenu(names, size=(20, 4), key='_OPT_')]]

window = sg.Window('').Layout(layout).Finalize()

new_values = ['Bill', 'Jeff']
window.Element('_LIST_').Update(values=new_values)
window.Element('_OPT_').Update(values=new_values, value='Jeff')

while True:
    event, values = window.Read()
    if event is None or event == 'Exit':
        break

window.Close()
Другие вопросы по тегам