PySimpleGUI/DemoPrograms/Demo_SDK_Help_Init_Update_P...

96 lines
4.6 KiB
Python
Raw Permalink Normal View History

import PySimpleGUI as sg
import inspect
"""
Displays a window showing the Init and Update parms for the PySimpleGUI Elements
The Function based elements (e.g. Push) can be found using the Demo Program Demo_SDK_Help_Func_Parms.py
If you've seen the Udemy course, then you saw this tool used in the element lessons
The Pink parameter signify the "Common" paramters that are shared among many of the elements
Copyright 2022 PySimpleGUI Project
"""
def main():
"""
Display a window that displays the parms for the init and update methods for each element
"""
common_parms = ['key','k','font','pad','p', 'visible','size','s', 'change_submits', 'enable_events','right_click_menu','tooltip','metadata', 'expand_x', 'expand_y']
element_classes = sg.Element.__subclasses__()
element_names = {element.__name__: element for element in element_classes}
element_names['Window'] = sg.Window
element_names['SystemTray'] = sg.SystemTray
# vars3 = [m for m in inspect.getmembers(sys.modules[__name__])]
element_arg_default_dict = {}
element_arg_default_dict_update = {}
for element in element_classes:
# Build info about init method
args = inspect.getfullargspec(element.__init__).args[1:]
defaults = inspect.getfullargspec(element.__init__).defaults
if len(args) != len(defaults):
diff = len(args) - len(defaults)
defaults = ('NO DEFAULT',)*diff + defaults
args_defaults = []
for i, a in enumerate(args):
args_defaults.append((a, defaults[i]))
element_arg_default_dict[element.__name__] = args_defaults
# Build info about update method
args = inspect.getfullargspec(element.update).args[1:]
defaults = inspect.getfullargspec(element.update).defaults
if args is None or defaults is None:
element_arg_default_dict_update[element.__name__] = (('',''),)
continue
if len(args) != len(defaults):
diff = len(args) - len(defaults)
defaults = ('NO DEFAULT',)*diff + defaults
args_defaults = []
for i, a in enumerate(args):
args_defaults.append((a, defaults[i]))
element_arg_default_dict_update[element.__name__] = args_defaults if len(args_defaults) else (('',''),)
sg.theme('black')
sg.theme_background_color('#131314')
sg.theme_text_element_background_color('#131314')
sg.theme_input_background_color('#131314')
ml = sg.Multiline(size=(40, 30), key='-ML-', write_only=True, reroute_stdout=True, expand_y=True, expand_x=True)
layout = [ [sg.Titlebar('Element Init & Update Parm Viewer', background_color='#131314', text_color='white')],
[sg.Combo([e for e in sorted(element_names.keys())],background_color='#131314', size=(25,30), enable_events=True, readonly=True, expand_x=True, key='-COMBO-')],
sg.vtop([ml], expand_y=True, expand_x=True) ] + [[sg.Sizegrip()]]
# layout += [[Button('Exit', size=(15, 1))]]
window = sg.Window('Init & Update Parms', layout, use_default_focus=False, keep_on_top=True, no_titlebar=True, margins=(0,0),font='Courier 12', right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_EXIT, resizable=True)
# ml = window['-ML-'] # type: sg.MLine
while True: # Event Loop
event, values = window.read()
if event in (sg.WIN_CLOSED, 'Exit'):
break
# ml.print(event, values)
if event == '-COMBO-':
element_chosen = values[event]
else:
element_chosen = None
if element_chosen in element_arg_default_dict:
window['-ML-'].update('')
ml.print('========== Init Parms ==========', background_color='#FFFF00', text_color='black')
for parm, default in element_arg_default_dict[element_chosen]:
ml.print(f'{parm:18}', text_color='hot pink' if parm in common_parms else 'green yellow', end=' = ')
ml.print(default, text_color='hot pink' if parm in common_parms else 'white', end = ',\n')
ml.print('========== Update Parms ==========', background_color='#FFFF00', text_color='black')
# print(element_arg_default_dict_update[element_chosen])
for parm, default in element_arg_default_dict_update[element_chosen]:
ml.print(f'{parm:18}', text_color='hot pink' if parm in common_parms else 'green yellow', end=' = ')
ml.print(default, text_color='hot pink' if parm in common_parms else 'white', end = ',\n')
elif event == 'Edit Me':
sg.execute_editor(__file__)
window.close()
if __name__ == '__main__':
main()