import sys
if sys.version_info[0] >= 3:
    import PySimpleGUI as sg
else:
    import PySimpleGUI27 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
"""

# 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', location=(800,600)).Layout(layout)
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 is None or event == '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.Text('', key='_OUTPUT_')],
            [sg.Input(do_not_clear=True, key='_IN_')],
            [sg.Button('Show'), sg.Button('Exit')]
                ]
        window2 = sg.Window('Second Window').Layout(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 is None:
            # print("Closing window 2", event)
            win2_active = False
            window2.Close()
        if event == 'Show':
            sg.Popup('You entered ', values['_IN_'])

window.Close()