diff --git a/DemoPrograms/Demo_Combo_Filechooser_With_History_And_Clear.py b/DemoPrograms/Demo_Combo_Filechooser_With_History_And_Clear.py new file mode 100644 index 00000000..3ba65023 --- /dev/null +++ b/DemoPrograms/Demo_Combo_Filechooser_With_History_And_Clear.py @@ -0,0 +1,44 @@ +import PySimpleGUI as sg + +""" + Demo Combo File Chooser - with clearable history + + This is a design pattern that is very useful for programs that you run often that requires + a filename be entered. You've got 4 options to use to get your filename with this pattern: + 1. Copy and paste a filename into the combo element + 2. Use the last used item which will be visible when you create the window + 3. Choose an item from the list of previously used items + 4. Browse for a new name + + To clear the list of previous entries, click the "Clear History" button. + + The history is stored in a json file using the PySimpleGUI User Settings APIs + + The code is as sparse as possible to enable easy integration into your code. + + Copyright 2021 PySimpleGUI +""" + + + +layout = [[sg.Combo(sorted(sg.user_settings_get_entry('-filenames-', [])), default_value=sg.user_settings_get_entry('-last filename-', ''), size=(50, 1), key='-FILENAME-'), sg.FileBrowse(), sg.B('Clear History')], + [sg.Button('Ok'), sg.Button('Cancel')]] + +window = sg.Window('Filename Chooser With History', layout) + +while True: + event, values = window.read() + + if event in (sg.WIN_CLOSED, 'Cancel'): + break + if event == 'Ok': + # If OK, then need to add the filename to the list of files and also set as the last used filename + sg.user_settings_set_entry('-filenames-', list(set(sg.user_settings_get_entry('-filenames-', []) + [values['-FILENAME-'], ]))) + sg.user_settings_set_entry('-last filename-', values['-FILENAME-']) + break + elif event == 'Clear History': + sg.user_settings_set_entry('-filenames-', []) + sg.user_settings_set_entry('-last filename-', '') + window['-FILENAME-'].update(values=[], value='') + +window.close()