Search code examples
pythonfullscreenpysimplegui

How to put multiple windows in fullscreen at once in PySimpleGUI


I am trying to create a few windows, which I need all of them to be in fullscreen. I am aware of .Maximize() but I can't get it work properly in this code. Any ideas? Thank you!

import PySimpleGUI as sg

def make_window1():
    layout = [[sg.Text('Window 1')],
              [sg.Button('Next >'), sg.Button('Exit')]]

    return sg.Window('Window 1', layout, finalize=True).Finalize()


def make_window2():
    layout = [[sg.Text('Window 2')],
               [sg.Button('Next >'), sg.Button('Exit')]]

    return sg.Window('Window 2', layout, finalize=True).Finalize()


window1, window2 = make_window1(), None

while True:
    window, event, values = sg.read_all_windows()
    window.Maximize()
    if window == window1 and event in (sg.WIN_CLOSED, 'Exit'):
        break

    if window == window1:
        if event == 'Next >':
            window1.hide()
            window2 = make_window2()

    if window == window2 and event in (sg.WIN_CLOSED, 'Exit'):
        break


window.close()

Solution

  • Just call method maximize() of window after it finalized.

    Four ways here to show the switching of windows.

    1. New window created with different layout.
    import PySimpleGUI as sg
    
    def make_window1():
        layout = [[sg.Text('Window 1')],
                  [sg.Button('Next >'), sg.Button('Exit')]]
        window = sg.Window('Window 1', layout, finalize=True)
        window.maximize()
        return window
    
    def make_window2():
        layout = [[sg.Text('Window 2')],
                   [sg.Button('Next >'), sg.Button('Exit')]]
        window = sg.Window('Window 1', layout, finalize=True)
        window.maximize()
        return window
    
    window, now = make_window1(), 1
    
    while True:
    
        event, values = window.read()
    
        if event in (sg.WINDOW_CLOSED, 'Exit'):
            break
        elif event == 'Next >':
            win, now = (make_window1(), 1) if now == 2 else (make_window2(), 2)
            window.close()
            window = win
    
    window.close()
    
    1. Dual window created at same time and decide which shown on screen.
    import PySimpleGUI as sg
    
    def make_window1():
        layout = [[sg.Text('Window 1')],
                  [sg.Button('Next >'), sg.Button('Exit')]]
        window = sg.Window('Window 1', layout, finalize=True)
        return window
    
    
    def make_window2():
        layout = [[sg.Text('Window 2')],
                   [sg.Button('Next >'), sg.Button('Exit')]]
        window = sg.Window('Window 1', layout, finalize=True)
        return window
    
    window1, window2 = make_window1(), make_window2()
    window1.maximize()
    window2.hide()
    
    while True:
    
        window, event, values = sg.read_all_windows()
    
        if event in (sg.WINDOW_CLOSED, 'Exit'):
            break
        elif event == 'Next >':
            window.hide()
            window = window1 if window == window2 else window2
            window.un_hide()
            window.maximize()
    
    window1.close()
    window2.close()
    
    1. Using sg.Column with attribute visible True or False
    import PySimpleGUI as sg
    
    def swap(now, step):
        window[f'COLUMN {now}'].update(visible=False)
        now = (now+step) % total
        window[f'COLUMN {now}'].update(visible=True)
        return now
    
    def column_layout(index):
        layout = [[sg.Text(f'Window {index+1}')]]
        return layout
    
    total, now = 5, 0
    
    sg.theme("DarkBlue")
    sg.set_options(font=('Courier New', 16))
    
    layout = [
        [sg.Column(column_layout(i), visible=(i==0), key=f'COLUMN {i}') for i in range(total)],
        [sg.VPush()],
        [sg.Button('< PREV'), sg.Push(), sg.Button('Exit'), sg.Push(), sg.Button('NEXT >')],
    ]
    
    window = sg.Window('Title', layout, finalize=True)
    window.maximize()
    
    while True:
    
        event, values = window.read()
        if event==sg.WINDOW_CLOSED or event.startswith('Exit'):
            break
        elif event in ("< PREV", "NEXT >"):
            now = swap(now, 1 if event == "NEXT >" else -1)
    
    window.close()
    

    Using sg.TabGroup

    import PySimpleGUI as sg
    
    def tab_layout(index):
        layout = [[sg.Text(f'Window {index+1}')]]
        return layout
    
    sg.theme("DarkBlue")
    sg.set_options(font=('Courier New', 16))
    
    total, now = 5, 0
    
    tab_group = [[sg.Tab(f"TAB {i}", tab_layout(i), key=f"TAB {i}")] for i in range(5)]
    layout = [
        [sg.TabGroup(tab_group, border_width=0, pad=(0, 0), expand_x=True, expand_y=True, key='TABGROUP')],
        [sg.VPush()],
        [sg.Button('< PREV'), sg.Push(), sg.Button('Exit'), sg.Push(), sg.Button('NEXT >')],
    ]
    window = sg.Window("Title", layout, finalize=True)
    style = sg.ttk.Style()
    style.layout('TNotebook.Tab', [])                           # Hide tab bar
    window.maximize()
    
    while True:
    
        event, values = window.read()
        if event in (sg.WINDOW_CLOSED, "Exit"):
            break
        elif event in ("< PREV", "NEXT >"):
            now = (now+1)%total if event == "NEXT >" else (now-1)%total
            window[f"TAB {now}"].select()
    
    window.close()