#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. Спасибо, отлично работает!