68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
# PySimple examples (v 3.9.3)
|
|
# Tony Crewe
|
|
# Sep 2018 - updated Oct 2018
|
|
|
|
# Based of Example program from MikeTheWatchGuy
|
|
# https://gitlab.com/lotspaih/PySimpleGUI
|
|
|
|
import sys
|
|
import PySimpleGUI as sg
|
|
import csv
|
|
|
|
sg.ChangeLookAndFeel('BrownBlue')
|
|
|
|
|
|
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
|
|
col_layout = [[sg.Table(values=data, headings=header, auto_size_columns=True,
|
|
max_col_width=12, justification='right', background_color='White',
|
|
text_color='Black', alternating_row_color='LightBlue', size=(None, len(data)))]]
|
|
|
|
layout = [[sg.Column(col_layout, size=(500, 400), scrollable=True)], ]
|
|
|
|
window = sg.Window('Table', location=(700, 325), grab_anywhere=False).Layout(layout)
|
|
b, v = window.Read()
|
|
|
|
|
|
slayout = [
|
|
[sg.Text('Load AFL file to display results with points and percentage'), sg.ReadButton('Load File', size=(20, 1))]]
|
|
swindow = sg.Window('Load File', location=(700, 250)).Layout(slayout)
|
|
|
|
while True:
|
|
button, value = swindow.Read()
|
|
if button is not None:
|
|
if button == 'Load File':
|
|
calc_ladder()
|
|
else:
|
|
break
|
|
|