Конечно, вы можете убедиться, что фон не виден, сначала открыв окно 2, которое будет создано поверх окна 1, затем закрыв окно 1.
Для этого добавьте .Finalize()
на создание окна 2.Это приведет к немедленному отображению окна.Затем на следующей строке закройте окно 1.
import PySimpleGUI as sg
layout = [[sg.Button('Users', key='show_user_list')]]
window = sg.Window('users').Layout(layout)
while True:
event, values = window.Read()
if event == 'show_user_list':
# code ommited here for simplicity
# do mysql stuff to fetch data
# layout2 = ...
# window2 = sg.Window('user listing').Layout(layout2).Finalize()
# window.Close()
# while True:
# event, values = window2.Read()
# ...
# like that I have multiple windows
else:
pass
Ключом к выполнению такого обновления окна является создание окон в том же месте.По умолчанию окна создаются по центру экрана.Это означает, что если ваши окна не одинакового размера, вы, вероятно, заметите небольшой «всплеск» при переходе от одного к другому.Но это не должно выглядеть плохо, потому что это произойдет так быстро.
Если вы действительно хотите стать модным, вы можете добавить еще один шаг, который сделает переключение между окнами еще более плавным.Этот новый шаг включает в себя создание окна 2 с Alpha = 0, что означает, что оно невидимо, затем после того, как оно полностью сформировано (с помощью Finalize()
), вы изменяете Alpha на 1, в результате чего окно появляется.
import PySimpleGUI as sg
layout = [[sg.Text('Example of window-replacement')],
[sg.Combo(['abdeffg', 'rrrfwwew'], size=(10, 4))],
[sg.B('Enable Filter'), sg.B('Warning'), sg.B('Reopen')],]
window = sg.Window('My Text Editor', layout)
while True: # Event Loop
event, values = window.Read()
if event is None:
break
print(event, values)
if event == 'Reopen':
layout2 = [[sg.Text('This is a completely different window')],
[sg.Combo(['abdeffg', 'rrrfwwew'], size=(10, 4))],
[sg.B('Enable Filter'), sg.B('Warning'), sg.B('Reopen')], ]
window2 = sg.Window('My Text Editor', layout2, alpha_channel=0).Finalize()
window2.SetAlpha(1)
window.Close()
window = window2
window.Close()
Это убрало некоторую «окраску» окна, которое я видел.Этого не должно быть, потому что я использую этот же трюк при создании окна для начала.Альфа используется, чтобы скрыть окно во время его создания.