how to eliminate space when invisible

Viewed 48

I want to use PysimpleGUI sg.pin to eliminate space when set some elements to invisible, but it doesn't work, here is my code:

import PySimpleGUI as sg

def vehicles(num):
    return sg.pin(sg.Column([sg.Text('Start time:',visible=False), sg.Input(size=(3,1), key=f'start{i}', visible=False), 
                    sg.Text('End time:',visible=False) , sg.Input(size=(3,1), key=f'end{i}', visible=False)] for i in range(num)) )
layout = [      [sg.Input(key = '1')],
                [vehicles(10)],
                [sg.pin(sg.Column([[sg.Button("Submit")],
                [sg.Button('Exit')]]))]
]
window = sg.Window('test',layout)
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event=="Exit":
        break
    if event == 'Submit':
        for i in range(int(values['1'])):
            window[f'start{i}'].update(visible=True)
        for i in range(int(values['1']), 10): # invisualize rest 
            window[f'start{i}'].update(visible=False)

After I make some of them invisible(I don't want them all invisible), space remain. For example, when entering 5, 5 boxes visible, but when enter 2 after, the rest 3 invisible boxes place remain.

What can I do to fix this?Thank you

1 Answers

There's only one start{i} Input element exist/visible or not in the Column element for function vehicles, add helper function sg.pin to it to shrink if this Input element invisible.

import PySimpleGUI as sg

def vehicles(num):
    return sg.pin(
        sg.Column(
            [
                [sg.Text('Start time:',visible=False),
                 sg.pin(sg.Input(size=(3,1), key=f'start{i}', visible=False)),
                 sg.Text('End time:',visible=False) ,
                 sg.Input(size=(3,1), key=f'end{i}', visible=False)] for i in range(num)
            ],
            pad=(0, 0),
        )
    )

layout = [
    [sg.Input(key = '1')],
    [vehicles(10)],
    [sg.pin(
        sg.Column(
            [
                [sg.Button("Submit")],
                [sg.Button('Exit')],
            ],
            pad=(0, 0),
        )
    )]
]
window = sg.Window('test',layout)
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event=="Exit":
        break
    if event == 'Submit':
        for i in range(int(values['1'])):
            window[f'start{i}'].update(visible=True)
        for i in range(int(values['1']), 10): # invisualize rest
            window[f'start{i}'].update(visible=False)

window.close()
Related