diff --git a/DemoPrograms/Demo_PNG_Viewer.py b/DemoPrograms/Demo_PNG_Viewer.py index 3604ec6e..5edb8ba1 100644 --- a/DemoPrograms/Demo_PNG_Viewer.py +++ b/DemoPrograms/Demo_PNG_Viewer.py @@ -3,7 +3,11 @@ import PySimpleGUI as sg import os ''' - Simple Image Browser based on PySimpleGUI + Simple Image Browser + + This is an early demo program, so perhaps not quite as sophisticated as later ones. + + Copyright 2021 PySimpleGUI ''' @@ -16,8 +20,8 @@ def main(): return # get list of PNG files in folder - png_files = [folder + '\\' + f for f in os.listdir(folder) if '.png' in f] - filenames_only = [f for f in os.listdir(folder) if '.png' in f] + png_files = [os.path.join(folder, f) for f in os.listdir(folder) if f.lower().endswith('.png')] + filenames_only = [f for f in os.listdir(folder) if f.lower().endswith('.png')] if len(png_files) == 0: sg.popup('No PNG images in folder') @@ -27,39 +31,39 @@ def main(): menu = [['File', ['Open Folder', 'Exit']], ['Help', ['About', ]]] # define layout, show and read the window - col = [[sg.Text(png_files[0], size=(80, 3), key='filename')], - [sg.Image(filename=png_files[0], key='image')], + col = [[sg.Text(png_files[0], size=(80, 3), key='-FILENAME-')], + [sg.Image(filename=png_files[0], key='-IMAGE-')], [sg.Button('Next', size=(8, 2)), sg.Button('Prev', size=(8, 2)), - sg.Text('File 1 of {}'.format(len(png_files)), size=(15, 1), key='filenum')]] + sg.Text('File 1 of {}'.format(len(png_files)), size=(15, 1), key='-FILENUM-')]] + + col_files = [[sg.Listbox(values=filenames_only, size=(60, 30), key='-LISTBOX-', enable_events=True)], + [sg.Text('Select a file. Use scrollwheel or arrow keys on keyboard to scroll through files one by one.')]] - col_files = [[sg.Listbox(values=filenames_only, size=(60, 30), key='listbox')], - [sg.Button('Read')]] layout = [[sg.Menu(menu)], [sg.Col(col_files), sg.Col(col)]] - window = sg.Window('Image Browser', layout, - return_keyboard_events=True, - location=(0, 0), - use_default_focus=False) + + window = sg.Window('Image Browser', layout, return_keyboard_events=True, use_default_focus=False) # loop reading the user input and displaying image, filename - i = 0 + filenum, filename = 0, png_files[0] while True: event, values = window.read() # --------------------- Button & Keyboard --------------------- if event == sg.WIN_CLOSED: break - elif event in ('Next', 'MouseWheel:Down', 'Down:40', 'Next:34') and i < len(png_files)-1: - i += 1 - elif event in ('Prev', 'MouseWheel:Up', 'Up:38', 'Prior:33') and i > 0: - i -= 1 + elif event in ('Next', 'MouseWheel:Down', 'Down:40', 'Next:34') and filenum < len(png_files)-1: + filenum += 1 + filename = os.path.join(folder, filenames_only[filenum]) + window['-LISTBOX-'].update(set_to_index=filenum, scroll_to_index=filenum) + elif event in ('Prev', 'MouseWheel:Up', 'Up:38', 'Prior:33') and filenum > 0: + filenum -= 1 + filename = os.path.join(folder, filenames_only[filenum]) + window['-LISTBOX-'].update(set_to_index=filenum, scroll_to_index=filenum) elif event == 'Exit': break - - if event == 'Read': - filename = folder + '/' + values['listbox'][0] - else: - filename = png_files[i] - + elif event == '-LISTBOX-': + filename = os.path.join(folder, values['-LISTBOX-'][0]) + filenum = png_files.index(filename) # ----------------- Menu choices ----------------- if event == 'Open Folder': newfolder = sg.popup_get_folder('New folder', no_window=True) @@ -67,24 +71,23 @@ def main(): continue folder = newfolder - png_files = [folder + '/' + - f for f in os.listdir(folder) if '.png' in f] - filenames_only = [f for f in os.listdir(folder) if '.png' in f] + png_files = [os.path.join(folder, f) for f in os.listdir(folder) if f.lower().endswith('.png')] + filenames_only = [f for f in os.listdir(folder) if f.lower().endswith('.png')] - window['listbox'].update(values=filenames_only) + window['-LISTBOX-'].update(values=filenames_only) window.refresh() - i = 0 + filenum = 0 elif event == 'About': sg.popup('Demo PNG Viewer Program', 'Please give PySimpleGUI a try!') # update window with new image - window['image'].update(filename=filename) + window['-IMAGE-'].update(filename=filename) # update window with filename - window['filename'].update(filename) + window['-FILENAME-'].update(filename) # update page display - window['filenum'].update('File {} of {}'.format(i+1, len(png_files))) + window['-FILENUM-'].update('File {} of {}'.format(filenum + 1, len(png_files))) window.close()