theFinestHobo
theFinestHobo

Reputation: 51

Content gets centered in PySimpleGui after hiding und unhiding content

I am trying to hide and unhide content in PySimpleGui. Here's the example code. How can I achieve, that the sg.Frame get's centered after hiding and unhiding the frame (by clicking the Checkbox in the top)?

import PySimpleGUI as sg

frameContent=[]
frameContent.append([sg.Text('Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. ')],)
frameContent.append([sg.Text('Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes,')],)
frameContent.append([sg.Text('nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. ')],)
frameContent2=[]
frameContent2.append([sg.Text('Nulla consequat massa quis enim.')],)
frameContent2.append([sg.Text('Donec pede justo, fringilla vel, ')],)
frameContent2.append([sg.Text('aliquet nec, vulputate eget, arcu.')],)
frameContent3=[]
frameContent3.append([sg.Text('In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. ')],)
frameContent3.append([sg.Text('Integer tincidunt. Cras dapibus.')],)
frameContent3.append([sg.Text('Vivamus elementum semper nisi. Aenean vulputate eleifend tellus.')],)
frameContent4=[]
frameContent4.append([sg.Text('In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. ')],)
frameContent4.append([sg.Text('Integer tincidunt. Cras dapibus.')],)
frameContent4.append([sg.Text('Vivamus elementum semper nisi. Aenean vulputate eleifend tellus.')],)
layout = [  
            [sg.Checkbox('Tooltips', key="-showTooltips-", enable_events=True)],
            [sg.Frame('Frame',frameContent, key='-frame1-',visible=True)],
            [sg.Frame('Frame',frameContent2, key='-frame2-',visible=True  )],
            [sg.Frame('Frame',frameContent3, key='-frame1Tooltips-',visible=False)],
            [sg.Frame('Frame',frameContent4, key='-frame2Tooltips-',visible=False  )]
        ]

window = sg.Window('Window Title', layout)
while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, 'Exit'):
        break
    if event == '-showTooltips-':
        for i in range(1,3):
            if values['-showTooltips-']:
                window["-frame"+str(i)+'-'].Update(visible=False)
                window["-frame"+str(i)+'-'].hide_row()
                window["-frame"+str(i)+"Tooltips-"].Update(visible=True)
                window["-frame"+str(i)+"Tooltips-"].unhide_row()
            else:  
                window["-frame"+str(i)+'-'].Update(visible=True)
                window["-frame"+str(i)+'-'].unhide_row()
                window["-frame"+str(i)+"Tooltips-"].Update(visible=False)
                window["-frame"+str(i)+"Tooltips-"].hide_row()
window.close()

Upvotes: 0

Views: 579

Answers (1)

Jason Yang
Jason Yang

Reputation: 13061

Use sg.pin to keep the position, and hide_row and unhide_row are not required.

Pin's an element provided into a layout so that when it's made invisible and visible again, it will be in the correct place. Otherwise it will be placed at the end of its containing window/column.

The code from layout updated to

layout = [
            [sg.Checkbox('Tooltips', key="-showTooltips-", enable_events=True)],
            [sg.pin(sg.Frame('Frame1',frameContent, key='-frame1-',visible=True))],
            [sg.pin(sg.Frame('Frame2',frameContent2, key='-frame2-',visible=True))],
            [sg.pin(sg.Frame('Frame3',frameContent3, key='-frame1Tooltips-',visible=False))],
            [sg.pin(sg.Frame('Frame4',frameContent4, key='-frame2Tooltips-',visible=False))]
        ]

window = sg.Window('Window Title', layout)
while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, 'Exit'):
        break
    if event == '-showTooltips-':
        for i in range(1,3):
            if values['-showTooltips-']:
                window["-frame"+str(i)+'-'].Update(visible=False)
                window["-frame"+str(i)+"Tooltips-"].Update(visible=True)
            else:
                window["-frame"+str(i)+'-'].Update(visible=True)
                window["-frame"+str(i)+"Tooltips-"].Update(visible=False)
window.close()

Upvotes: 2

Related Questions