New Demo - how to "reuse" a layout (but not by actually reusing it)

This commit is contained in:
PySimpleGUI 2021-03-22 13:33:31 -04:00
parent 39dcf1c551
commit 91ab3a9596
1 changed files with 67 additions and 0 deletions

View File

@ -0,0 +1,67 @@
import PySimpleGUI as sg
"""
Demo - Layout "Reuse" (but NOT reusing the layout)
As cautioned in the PySimpleGUI documentation, layouts cannot be "reused".
That said, there is a very simple design pattern that you'll find in many many
Demo Programs. Any program that is capable of changing the theme uses this
same kind of pattern.
Goal - write the layout code once and then use it multiple times
The layout is reused
Solution - create the layout and window in a function and return it
Copyright 2021 PySimpleGUI
"""
def make_window():
"""
Defines the layout and creates the window.
This will allow you to "reuse" the layout.
Of course, the layout isn't reused, it is creating a new copy of the layout
every time the function is called.
:return: newly created window
:rtype: sg.Window
"""
# ------------------- Layout Definition -------------------
layout = [[sg.Text('This is your layout')],
[sg.Input(key='-IN-')],
[sg.Text('You typed:'), sg.Text(size=(20,1), key='-OUT-')],
[sg.Button('Go'), sg.Button('Dark Gray 13 Theme'), sg.Button('Exit')]]
# ------------------- Window Creation -------------------
return sg.Window('Window Title', layout)
def main():
"""
Your main program that contains your event loop
Rather than creating the layout and Window in this function, you will
instead call the make_window function to make the layout and Window
"""
window = make_window() # create the window
while True:
event, values = window.read()
print(event, values)
if event == sg.WIN_CLOSED or event == 'Exit':
break
if event == 'Go':
# change the "output" element to be the value of "input" element
window['-OUT-'].update(values['-IN-'])
elif event.startswith('Dark'):
sg.theme('Dark Gray 13')
window.close() # close the window
window = make_window() # make a new window with the "same layout"
window.close()
if __name__ == '__main__':
main()