Можно ли обновить PySimpleGUI InputOptionMenu? - PullRequest
1 голос
/ 24 марта 2019

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

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()

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

1 Ответ

0 голосов
/ 24 марта 2019

Вы действительно можете обновить до новых значений.У вас есть параметр в вызове обновления не по порядку.Первый параметр value устанавливает текущее отображаемое значение.Параметр second , 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()
...