Содержимое центрируется в PySimpleGui после скрытия неопределенного содержимого

#python #pysimplegui

Вопрос:

Я пытаюсь скрыть и отобразить содержимое в PySimpleGui. Вот пример кода. Как я могу добиться того, чтобы sg.Кадр был центрирован после скрытия и раскрытия кадра (щелкнув флажок вверху)?

 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()  

Ответ №1:

Используйте sg.pin , чтобы сохранить позицию, и hide_row и unhide_row не требуются.

Pin-код-это элемент, предусмотренный в макете, чтобы, когда он снова станет невидимым и видимым, он находился в нужном месте. В противном случае он будет помещен в конец содержащего его окна/столбца.

Код из макета обновлен до

 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()  

Комментарии:

1. Спасибо, отлично работает!