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…
JavaScript
x
25
25
1
[sg.Text("Index")],
2
[sg.Listbox(load_list(), size=(17,16), key='-LISTBOX-')],
3
[sg.Button("Add", key='-ADD-'), sg.Button("Delete", key='-DELETE-')]
4
]
5
6
window = sg.Window("Index", layout)
7
add_window = sg.Window('Add a name', adicionar_layout)
8
9
# Event Loop
10
while True:
11
event, values = window.read()
12
if event is None:
13
break
14
if event == '-ADD-':
15
add, input = add_window.read()
16
if add == '-SUBMIT-':
17
new_name = input.get('-INPUTADD-')
18
with open('saved_names.txt', 'a') as f:
19
f.write('n' + new_name)
20
window.Element('-LISTBOX-').Update((load_list()))
21
add_window.close()
22
print(load_list())
23
24
window.close()
25
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.
JavaScript
1
43
43
1
import PySimpleGUI as sg
2
3
def popup_get_new_name():
4
5
layout = [
6
[sg.Text("New Name"), sg.Input(key='INPUT')],
7
[sg.Button("Submit"), sg.Button('Cancel')],
8
]
9
window = sg.Window("New Name", layout, modal=True)
10
11
while True:
12
event, values = window.read()
13
if event in (sg.WINDOW_CLOSED, "Cancel"):
14
new_name = None
15
elif event == "Submit":
16
new_name = values['INPUT']
17
break
18
19
window.close()
20
return new_name
21
22
23
sg.theme("DarkBlue3")
24
sg.set_options(font=("Courier New", 12))
25
26
layout = [
27
[sg.Button("Add")],
28
[sg.StatusBar("", size=(40, 1), key='STATUS')],
29
]
30
window = sg.Window('Add New Name', layout, finalize=True)
31
32
while True:
33
34
event, values = window.read()
35
if event == sg.WINDOW_CLOSED:
36
break
37
elif event == 'Add':
38
new_name = popup_get_new_name()
39
if new_name is not None:
40
window['STATUS'].update(value=new_name)
41
42
window.close()
43