我想更新PySimpleGUI 输入选项菜单的值。最初,以下内容将“名称”列表的内容分配给列表框。分配“ new_values”列表时,此设置将被覆盖。因此,更新列表框没有问题,但是 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。 列表框是,但是 InputOptionMenu 显示罗伯塔和凯莉。
答案 0 :(得分:-1)
您确实可以更新为新值。您在更新调用中有一个参数混乱。第一个参数value
设置当前显示的值。 second 参数values
是您需要的参数。
解决方法是将参数名称添加到您的呼叫中:
window.Element('_LIST_').Update(values=new_values)
此外,您不得将两个键的名称相同。它们在布局中必须是唯一的。我会称呼另一个_OPTIONS_
或类似的名称。
“选项菜单”的更新代码中存在一个错误,现已修复并检入GitHub。该修补程序已以3.27版上传到PyPI。
这是您的代码,使用最新的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()