#PySimple examples (v 3.9.3) #Tony Crewe #Oct 2018 MacOs #Based of Example program from MikeTheWatchGuy #https://gitlab.com/lotspaih/PySimpleGUI import sys import PySimpleGUI as sg import csv #sg.ChangeLookAndFeel('BrownBlue') sg.SetOptions(background_color = 'LightBlue', element_background_color = 'LightBlue') def calc_ladder(): filename = sg.PopupGetFile('Get required file', no_window = True,file_types=(("CSV Files","*.csv"),)) #populate table with file contents #Assume we know csv has heading in row 1 #Assume we know 7 columns of data - relevenat to AFL w/o Pts or % shown #data is a list of lists containing data about each team #data[0] is one teams data data[0[[0] = team, data[0][1] P, data[0] [2] W, #data[0][3] L, data [0][4] D, data [0][5] F, data [0][6] A #no error checking or validation used. #initialise variable data = [] header_list = [] #read csv with open(filename, "r") as infile: reader = csv.reader(infile) for i in range (1): #get headings header = next(reader) #read everything else into a list of rows data = list(reader) #add headings header = header + ['%', 'Pts'] for i in range (len(data)): #calculate % and format to 2 decimal places percent = str('{:.2f}'.format(int(data[i][5])/int(data[i][6])*100)) data[i] = data[i] + [percent] #add to data pts = int(data[i][2])*4 + int(data[i][4])*2 data[i] = data[i] + [pts] #add to data #use Table (explore settings) and add to column layout # #------ With MacOs -- manually adjust col_widths, auto to False ------------ # col_layout = [[sg.Table(values=data, headings=header,col_widths = (16, 4,4,4,4,6,6,7,4), auto_size_columns=False, max_col_width = 30,justification='right', size=(None, len(data)))]] layout = [[sg.Column(col_layout, size=(520,360), scrollable=True)],] window = sg.Window('AFL Ladder',location = (500, 310), grab_anywhere = False).Layout(layout) b, v = window.Read() slayout = [[sg.Text('Load AFL file to display results with points and percentage', font = ('Arial', 14, 'bold')), sg.ReadButton('Load File', font = ('Arial', 14, 'bold'), size = (15,1))]] swindow = sg.Window('Load File', location = (500,250)).Layout(slayout) while True: button, value = swindow.Read() if button is not None: if button == 'Load File': calc_ladder() else: break