#python #pysimplegui
#python #pysimplegui
Вопрос:
Я хочу обновить значения в меню параметров ввода PySimpleGUI. Следующее изначально присваивает содержимое списка «имена» Listbox. Это перезаписывается при назначении списка ‘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()
Я ожидаю, что оба элемента будут обновлены до Bill и Jeff. Listbox есть, но в InputOptionMenu отображаются Роберта и Кайли.
Ответ №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()
Комментарии:
1. Это работает, если вы получаете последний код с GitHub, как описано в ответе.
2. При запуске с последней версией user-images.githubusercontent.com/13696193 /…
3. Все еще не понимаю понижения голосов, когда OP указывает, что код работает. Действительно пытался решить и эту проблему.
4. Я поддержал ваш ответ, чтобы избавиться от отрицательной оценки. =)