Обновление элементов в PySimpleGUI

У меня есть интерфейс:

menu = [['Файл', ['Открыть одноканальный снимок', 'Загрузить векторный слой', 'Выход']]]]

open_raster = [[sg.Text('Выберите растровый файл', size=(22, 1), font=('Courier 10', 12)),
            sg.InputText(key="raster_file_path", size=(39, 1), font=('Courier 10', 11)),
            sg.FileBrowse('Обзор', file_types=[("Tiff Files", "*.tif")], font=('Courier 10', 11))]]

open_vector = [[sg.Text("Выберите векторный файл", size=(22, 1), font=('Courier 10', 12)),
            sg.InputText(key="vector_file_path", size=(39, 1), font=('Courier 10', 11)),
            sg.FileBrowse('Обзор', file_types=[("Shape Files", "*.shp")])]]

frame1_layout = [[sg.Frame('', [[]], size=(600, 600), key='FRAME1')]]

frame2_layout = [[sg.Frame('', [[]], size=(600, 600), key='FRAME2')]]

frame1 = sg.Column(frame1_layout, element_justification='c', expand_x=True)
frame2 = sg.Column(frame2_layout, element_justification='c', expand_x=True)

layout = [[sg.Menu(menu)], [frame1, frame2]]

window = sg.Window("Приложение", layout, finalize=True)

Как сделать так, чтобы при выборе в меню пункта 'Открыть одноканальный снимок' обновлялось окно frame1 и там повелись элементы из open_raster?


Ответы (1 шт):

Автор решения: Volk

Вариант такой:

Надо вам добавить следующее после window = sg.Window("Приложение", layout, finalize=True):

while True:
    event, values = window.read() 
    if event == 'Открыть одноканальный снимок':
        window['FRAME1'].update('Вот такая штука')

window.close()

Т.е. вы постоянно считываете, что у вас происходит в рабочем окне. И как пример, что происходит при нажатии меню 'Открыть одноканальный снимок'. Появляется надпись в FRAME1 - Вот такая штука. Это как вариант. Но подход общий такой, т.е. надо описать, что происходит, если....

→ Ссылка