53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
|
import PySimpleGUI as sg
|
||
|
# import PySimpleGUIQt as sg
|
||
|
# import PySimpleGUIWx 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')
|