PySimpleGUI/DemoPrograms/Demo_Event_Callback_Simulat...

63 lines
2.2 KiB
Python

import PySimpleGUI as sg
'''
Event Callback Simulation
This design pattern simulates callbacks for events.
This is NOT the "normal" way things work in PySimpleGUI and is an architecture that is actively discouraged
Unlike tkinter, Qt, etc, PySimpleGUI does not utilize callback
functions as a mechanism for communicating when button presses or other events happen.
BUT, should you want to quickly convert some existing code that does use callback functions, then this
is one way to do a "quick and dirty" port to PySimpleGUI.
'''
# The callback functions
# These callbacks all display a message in a non-blocking way and immediately return
def button1(event, values):
sg.popup_quick_message('Button 1 callback',
background_color='red',
text_color='white')
def button2(event, values):
sg.popup_quick_message('Button 2 callback',
background_color='green',
text_color='white')
def catch_all(event, values):
sg.popup_quick_message(f'An unplanned event = "{event}" happend',
background_color='blue',
text_color='white', auto_close_duration=6)
# Lookup dictionary that maps event to function to call. In this case, only 2 event have defined callbacks
func_dict = {'1': button1, '2': button2}
# Layout the design of the GUI
layout = [[sg.Text('Please click a button')],
[sg.Button('1'), sg.Button('2'), sg.Button('Not defined', key='-MY-KEY-'), sg.Quit()]]
# Show the Window to the user
window = sg.Window('Button callback example', layout)
# Event loop. Read buttons, make callbacks
while True:
# Read the Window
event, values = window.read()
# Lookup event in function dictionary and call the function, passing in the event and values variables
try:
func_dict[event](event, values) # Call function with event and values
except:
catch_all(event, values)
# See if should close the window
if event in ('Quit', None): # normally this is done IMMEDIATELY after the read
break
window.close()
# All done!
sg.popup_auto_close('Done... this window auto closes')