Major update of all demo programs to use new PEP8 bindings, etc

This commit is contained in:
PySimpleGUI 2019-10-23 16:10:03 -04:00
parent 3f7c87c562
commit 7f52778bcc
307 changed files with 19546 additions and 3297 deletions

View file

@ -1,12 +1,9 @@
#!/usr/bin/env python
import sys
if sys.version_info[0] >= 3:
import PySimpleGUI as sg
else:
import PySimpleGUI27 as sg
import PySimpleGUI as sg
import os
from PIL import Image, ImageTk
import io
"""
Simple Image Browser based on PySimpleGUI
--------------------------------------------
@ -19,13 +16,14 @@ There are some improvements compared to the PNG browser of the repository:
Dependecies
------------
Python v3
Python3
PIL
"""
# Get the folder containin:g the images from the user
folder = sg.PopupGetFolder('Image folder to open', default_path='')
folder = sg.popup_get_folder('Image folder to open', default_path='')
if not folder:
sg.PopupCancel('Cancelling')
sg.popup_cancel('Cancelling')
raise SystemExit()
# PIL supported image types
@ -35,60 +33,59 @@ img_types = (".png", ".jpg", "jpeg", ".tiff", ".bmp")
flist0 = os.listdir(folder)
# create sub list of image files (no sub folders, no wrong file types)
fnames = [f for f in flist0 if os.path.isfile(os.path.join(folder,f)) and f.lower().endswith(img_types)]
fnames = [f for f in flist0 if os.path.isfile(
os.path.join(folder, f)) and f.lower().endswith(img_types)]
num_files = len(fnames) # number of iamges found
if num_files == 0:
sg.Popup('No files in folder')
sg.popup('No files in folder')
raise SystemExit()
del flist0 # no longer needed
#------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
# use PIL to read data of one image
#------------------------------------------------------------------------------
def get_img_data(f, maxsize = (1200, 850), first = False):
# ------------------------------------------------------------------------------
def get_img_data(f, maxsize=(1200, 850), first=False):
"""Generate image data using PIL
"""
img = Image.open(f)
img.thumbnail(maxsize)
if first: # tkinter is inactive the first time
bio = io.BytesIO()
img.save(bio, format = "PNG")
img.save(bio, format="PNG")
del img
return bio.getvalue()
return ImageTk.PhotoImage(img)
#------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
# create the form that also returns keyboard events
window = sg.Window('Image Browser', return_keyboard_events=True,
location=(0, 0), use_default_focus=False)
# make these 2 elements outside the layout as we want to "update" them later
# initialize to the first file in the list
filename = os.path.join(folder, fnames[0]) # name of first file in list
image_elem = sg.Image(data = get_img_data(filename, first = True))
image_elem = sg.Image(data=get_img_data(filename, first=True))
filename_display_elem = sg.Text(filename, size=(80, 3))
file_num_display_elem = sg.Text('File 1 of {}'.format(num_files), size=(15,1))
file_num_display_elem = sg.Text('File 1 of {}'.format(num_files), size=(15, 1))
# define layout, show and read the form
col = [[filename_display_elem],
[image_elem]]
[image_elem]]
col_files = [[sg.Listbox(values = fnames, change_submits=True, size=(60, 30), key='listbox')],
[sg.Button('Next', size=(8,2)), sg.Button('Prev',
size=(8,2)), file_num_display_elem]]
col_files = [[sg.Listbox(values=fnames, change_submits=True, size=(60, 30), key='listbox')],
[sg.Button('Next', size=(8, 2)), sg.Button('Prev', size=(8, 2)), file_num_display_elem]]
layout = [[sg.Column(col_files), sg.Column(col)]]
layout = [[sg.Col(col_files), sg.Col(col)]]
window.Layout(layout) # Shows form on screen
window = sg.Window('Image Browser', layout, return_keyboard_events=True,
location=(0, 0), use_default_focus=False)
# loop reading the user input and displaying image, filename
i=0
i = 0
while True:
# read the form
event, values = window.Read()
event, values = window.read()
print(event, values)
# perform button and keyboard operations
if event is None:
@ -111,10 +108,10 @@ while True:
filename = os.path.join(folder, fnames[i])
# update window with new image
image_elem.Update(data=get_img_data(filename))
image_elem.update(data=get_img_data(filename))
# update window with filename
filename_display_elem.Update(filename)
filename_display_elem.update(filename)
# update page display
file_num_display_elem.Update('File {} of {}'.format(i+1, num_files))
file_num_display_elem.update('File {} of {}'.format(i+1, num_files))
window.close()