Reputation: 51
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
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