diff --git a/DemoPrograms/Demo_Design_Pattern_Multiple_Windows.py b/DemoPrograms/Demo_Design_Pattern_Multiple_Windows.py index 5bdb6687..9727b759 100644 --- a/DemoPrograms/Demo_Design_Pattern_Multiple_Windows.py +++ b/DemoPrograms/Demo_Design_Pattern_Multiple_Windows.py @@ -1,54 +1,43 @@ import PySimpleGUI as sg """ - Demo - Running 2 windows with both being active at the same time - Three important things to note about this design patter: - 1. The layout for window 2 is inside of the while loop, just before the call to window2=sg.Window - 2. The read calls have timeout values of 100 and 0. You can change the 100 to whatever interval you wish - but must keep the second window's timeout at 0 - 3. There is a safeguard to stop from launching multiple copies of window2. Only 1 window2 is visible at a time + Demo - 2 simultaneous windows using read_all_window + + Window 1 launches window 2 + BOTH remain active in parallel + + Both windows have buttons to launch popups. The popups are "modal" and thus no other windows will be active + + Copyright 2020 PySimpleGUI.org """ -sg.theme('Dark Blue 3') -# Window 1 layout -layout = [ - [sg.Text('This is the FIRST WINDOW'), sg.Text(' ', key='-OUTPUT-')], - [sg.Text()], - [sg.Button('Launch 2nd Window'), sg.Button('Popup'), sg.Button('Exit')] - ] +def make_win1(): + layout = [[sg.Text('This is the FIRST WINDOW'), sg.Text(' ', k='-OUTPUT-')], + [sg.Text()], + [sg.Button('Launch 2nd Window'), sg.Button('Popup'), sg.Button('Exit')]] + return sg.Window('Window Title', layout, location=(800,600), finalize=True) + + +def make_win2(): + layout = [[sg.Text('The second window')], + [sg.Input(key='-IN-')], + [sg.Text(size=(25,1), k='-OUTPUT-')], + [sg.Button('Show'), sg.Button('Popup'), sg.Button('Exit')]] + return sg.Window('Second Window', layout, finalize=True) + +window1, window2 = make_win1(), None # start off with 1 window open -window = sg.Window('Window Title', layout, location=(800,600)) -win2_active = False -i=0 while True: # Event Loop - event, values = window.read(timeout=100) - if event != sg.TIMEOUT_KEY: - print(i, event, values) - if event in (sg.WIN_CLOSED, 'Exit'): - break + window, event, values = sg.read_all_windows() + if event == sg.WIN_CLOSED or event == 'Exit': + window.close() + if window == window2: # if closing win 2, mark as closed + window2 = None + elif window == window1: # if closing win 1, exit program + break elif event == 'Popup': sg.popup('This is a BLOCKING popup','all windows remain inactive while popup active') - i+=1 - if event == 'Launch 2nd Window' and not win2_active: # only run if not already showing a window2 - win2_active = True - # window 2 layout - note - must be "new" every time a window is created - layout2 = [ - [sg.Text('The second window')], - [sg.Input(key='-IN-')], - [sg.Button('Show'), sg.Button('Exit')] - ] - window2 = sg.Window('Second Window', layout2) - # Read window 2's events. Must use timeout of 0 - if win2_active: - # print("reading 2") - event, values = window2.read(timeout=100) - # print("win2 ", event) - if event != sg.TIMEOUT_KEY: - print("win2 ", event) - if event == 'Exit' or event == sg.WIN_CLOSED: - # print("Closing window 2", event) - win2_active = False - window2.close() - if event == 'Show': - sg.popup('You entered ', values['-IN-']) - + elif event == 'Launch 2nd Window' and not window2: + window2 = make_win2() + elif event == 'Show': + window['-OUTPUT-'].update(f'You enetered {values["-IN-"]}') window.close() \ No newline at end of file diff --git a/DemoPrograms/Demo_Design_Pattern_Multiple_Windows_OLD METHOD.py b/DemoPrograms/Demo_Design_Pattern_Multiple_Windows_OLD METHOD.py new file mode 100644 index 00000000..1020bc87 --- /dev/null +++ b/DemoPrograms/Demo_Design_Pattern_Multiple_Windows_OLD METHOD.py @@ -0,0 +1,55 @@ +import PySimpleGUI as sg +""" + Demo - Running 2 windows with both being active at the same time + Three important things to note about this design patter: + 1. The layout for window 2 is inside of the while loop, just before the call to window2=sg.Window + 2. The read calls have timeout values of 100 and 0. You can change the 100 to whatever interval you wish + but must keep the second window's timeout at 0 + 3. There is a safeguard to stop from launching multiple copies of window2. Only 1 window2 is visible at a time +""" + +sg.theme('Dark Blue 3') +# Window 1 layout +layout = [ + [sg.Text('This is the FIRST WINDOW'), sg.Text(' ', key='-OUTPUT-')], + [sg.Text()], + [sg.Button('Launch 2nd Window'), sg.Button('Popup'), sg.Button('Exit')] + ] + +window = sg.Window('Window Title', layout, location=(800,600)) + +win2_active = False +i=0 +while True: # Event Loop + event, values = window.read(timeout=100) + if event != sg.TIMEOUT_KEY: + print(i, event, values) + if event in (sg.WIN_CLOSED, 'Exit'): + break + elif event == 'Popup': + sg.popup('This is a BLOCKING popup','all windows remain inactive while popup active') + i+=1 + if event == 'Launch 2nd Window' and not win2_active: # only run if not already showing a window2 + win2_active = True + # window 2 layout - note - must be "new" every time a window is created + layout2 = [ + [sg.Text('The second window')], + [sg.Input(key='-IN-')], + [sg.Button('Show'), sg.Button('Exit')] + ] + window2 = sg.Window('Second Window', layout2) + # Read window 2's events. Must use timeout of 0 + if win2_active: + # print("reading 2") + event, values = window2.read(timeout=100) + # print("win2 ", event) + if event != sg.TIMEOUT_KEY: + print("win2 ", event) + if event == 'Exit' or event == sg.WIN_CLOSED: + # print("Closing window 2", event) + win2_active = False + window2.close() + if event == 'Show': + sg.popup('You entered ', values['-IN-']) + +window.close() \ No newline at end of file