PySimpleGui не может получить доступ к списку в InputCombo

#python #user-interface #pysimplegui

Вопрос:

Я создаю простой графический интерфейс для своего скрипта python с помощью PySimpleGui и сталкиваюсь с проблемой. Каждый раз, когда я хочу добавить новое целое число в свой список InputCombo, я не могу получить доступ к новому целому числу.

Я написал базовый сценарий, чтобы показать:

 import PySimpleGUI as sg
things=["a","b"]
layout=[[sg.Input(key="-input-",size=(10,1)),sg.Button("add",key="-add-")],
        [sg.InputCombo(things,key="-combo-"),sg.Button("write")],
        [sg.Text("",key="-output-"),sg.Button("Quit")]]
window=sg.Window("Name",layout,size=(200,200))
while True:
    event,values=window.read()
    if event==sg.WINDOW_CLOSED or event=="Quit":
        break
    if event=="add":
        things.append(values["-input"])
    if event=="write":
        window["-output-"].update(values["-combo-"])
 

У меня есть список «вещей». Я могу добавить новое значение, если напишу что-то в поле ввода. С помощью кнопки «добавить» я добавляю значение в свой список «вещи». С помощью InputCombo я могу получить доступ к значениям v в моем списке, например «a» и «b». Если я выберу «a» или «b» и нажму «написать», текстовое поле обновится и напишет «a» или «b». Но в InputCombo я не могу выбрать значения, которые я добавил позже.
У кого-нибудь есть идеи, как я могу заставить все работать?

Комментарии:

1. Кнопка add просто добавляет новый элемент в список things , а не в sg.InputCombo него . Вам нужно обновить sg.InputCombo с помощью опции values=things . event=="add" это неправильно, должно быть event=="-add-" потому, что вы установили клавишу кнопки add как » — добавить-«.

2. Спасибо за ваш ответ. Но я этого не понимаю. Я относительно новичок в PySImpleGui. Я переоделся add в -add- .

3. Ответил в ответ.

Ответ №1:

Вызовите метод update(values=things) sg.InputCombo для обновления новых значений.

Пересмотренный кодекс,

 import PySimpleGUI as sg

things = ["a","b"]

layout = [
    [sg.Input(key="-input-", size=(10,1)),
     sg.Button("add", key="-add-")],
    [sg.InputCombo(things, key="-combo-"),
     sg.Button("write")],
    [sg.Text("", key="-output-"),
     sg.Button("Quit")],
]
window = sg.Window("Name", layout, size=(200, 200))

while True:

    event, values = window.read()

    if event == sg.WINDOW_CLOSED or event == "Quit":
        break
    elif event == "-add-":                          # Correct event to add
        things.append(values["-input-"])
        window['-combo-'].update(values=things)     # Statement to update
    elif event == "write":
        window["-output-"].update(values["-combo-"])

window.close()