Skip to content
Advertisement

Why is the button “Add” only working once?

I want to be able to use the button “Add” multiple times but at the moment it only works once. I only have pysimplegui imported. Heres part of the code because looks like i have a limit of characters or something. Hope I don’t have to wait 3 days again…

    [sg.Text("Index")],
    [sg.Listbox(load_list(), size=(17,16), key='-LISTBOX-')],
    [sg.Button("Add", key='-ADD-'), sg.Button("Delete", key='-DELETE-')]
]

window = sg.Window("Index", layout)
add_window = sg.Window('Add a name', adicionar_layout)

# Event Loop
while True:
    event, values = window.read()
    if event is None:
        break
    if event == '-ADD-':
        add, input = add_window.read()
        if add == '-SUBMIT-':
            new_name = input.get('-INPUTADD-')
            with open('saved_names.txt', 'a') as f:
                f.write('n' + new_name)
            window.Element('-LISTBOX-').Update((load_list()))
            add_window.close()
            print(load_list())

window.close()

Advertisement

Answer

Your add_window closed after first-time event -ADD-, so it doesn’t work after it.

Add one new popup to get new name and return input value to main window.

import PySimpleGUI as sg

def popup_get_new_name():

    layout = [
        [sg.Text("New Name"), sg.Input(key='INPUT')],
        [sg.Button("Submit"), sg.Button('Cancel')],
    ]
    window = sg.Window("New Name", layout, modal=True)

    while True:
        event, values = window.read()
        if event in (sg.WINDOW_CLOSED, "Cancel"):
            new_name = None
        elif event == "Submit":
            new_name = values['INPUT']
        break

    window.close()
    return new_name


sg.theme("DarkBlue3")
sg.set_options(font=("Courier New", 12))

layout = [
    [sg.Button("Add")],
    [sg.StatusBar("", size=(40, 1), key='STATUS')],
]
window = sg.Window('Add New Name', layout, finalize=True)

while True:

    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    elif event == 'Add':
        new_name = popup_get_new_name()
        if new_name is not None:
            window['STATUS'].update(value=new_name)

window.close()
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement