1

我想更新 PySimpleGUI Input Option Menu的值。以下最初将“名称”列表的内容分配给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()

我的期望是这两个元素都将更新为比尔和杰夫。Listbox是,但InputOptionMenu显示的是 Roberta 和 Kylie。

4

1 回答 1

3

您确实可以更新到新值。你在更新调用中有一个参数乱序。第一个参数,value设置当前显示的值。第二参数,values是你需要的。

解决方法是将参数名称添加到您的调用中:

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

此外,您不能将 2 个键命名为相同的名称。它们在布局中必须是唯一的。我会打电话给另一个_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()
于 2019-03-24T13:32:02.657 回答