可以更新PySimpleGUI InputOptionMenu吗?

时间:2019-03-23 21:08:00

标签: python pysimplegui

我想更新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 显示罗伯塔和凯莉。

1 个答案:

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