示例#1
0
    def __init__(self, teamNumber):
        self.number = teamNumber
        tbaInfo = tba.getTeamInfo(teamNumber)

        self.name = None
        self.attendedEvents = None

        if tba.isOnline(
        ):  # will be false if no internet or can't connect to tba
            self.name = tbaInfo['teamName']
            self.attendedEvents = tbaInfo['attendedEvents']

        self.getTeamInfoFromJSON()

        self.image = GUI.filedir + "\\images\\default.jpg"
        for extension in imagetypes:
            imgpath = GUI.filedir + "\\images\\" + str(teamNumber) + extension
            if path.isfile(imgpath):
                self.image = imgpath
                break

            imgpath = GUI.filedir + "\\images\\" + str(
                teamNumber) + extension.upper()
            if path.isfile(imgpath):
                self.image = imgpath
                break

        if not inList(self, teams):
            teams.append(self)
示例#2
0
文件: GUI.py 项目: Team4618/Scouting
    def __init__(self, parent, *args):
        self.parent = parent

        # main notebook
        self.root = Notebook(parent)
        self.root.pack(expand=True, fill=BOTH)

        self.scoutingPage = scouting.ScoutingUI(self.root)
        self.pickListPage = pickList.PickList(self.root)
        self.sortPage = sort.Sort(self.root)

        self.root.select(0)  # select the scouting page

        chooseFileBtn = Button(parent,
                               text="Choose data folder",
                               command=self.getFileDir)
        chooseFileBtn.pack(side=LEFT)

        # set our working directory
        chdir(path.dirname(__file__))

        # set a reference to the current directory where we're looking for data
        self.fileStrVar = StringVar()

        global filedir
        filedir = getcwd() + "\\files"

        if len(filedir) > 20:
            filedir = "..." + filedir[-17:]

        self.fileStrVar.set(filedir)
        Label(parent, textvariable=self.fileStrVar).pack(side=LEFT)

        # selector for event
        self.eventSV = StringVar()
        self.eventSV.set(event)

        self.eventSV.trace('w', self.onEventChange)

        eventList = ["No internet connection"]

        if isOnline():
            eventList = list(events.keys())

        eventChooser = OptionMenu(parent, self.eventSV, *eventList)
        eventChooser.pack(side=RIGHT)

        Label(parent, text="Event:").pack(side=RIGHT)
示例#3
0
    def reloadTeams(self, eventcode):
        try:
            self.pickListBox.delete(0, END)
        except AttributeError:  # we haven't created it yet
            pass

        self.teamsListBox.delete(0, END)

        if tba.isOnline():
            teams = tba.getTeams(eventcode)
        else:
            teams = ["No internet connection"]

        self.teams = []
        for team in teams:
            self.teamsListBox.insert(END, str(team))
            self.teams.append(team)

        self.remainingTeams = self.teams
示例#4
0
    def addToPickList(self, *args):
        if not tba.isOnline():
            return

        # TODO: store the picklist in an array of teams instead of strings/ints
        try:
            self.pickList.append(
                self.teamsListBox.get(self.teamsListBox.curselection()))
        except TclError:
            return

        length = self.pickListBox.size()

        self.pickListBox.insert(
            END,
            str(length + 1) + ". " +
            str(self.teamsListBox.get(self.teamsListBox.curselection())))
        self.tags.append("")
        del (self.remainingTeams[self.remainingTeams.index(
            self.teamsListBox.get(self.teamsListBox.curselection()))])
        self.teamsListBox.delete(self.teamsListBox.curselection())
示例#5
0
文件: GUI.py 项目: Team4618/Scouting
    def onEventChange(self, *args2):
        if not isOnline():
            return

        event = events[self.eventSV.get()]
        self.pickListPage.reloadTeams(event)
示例#6
0
文件: GUI.py 项目: Team4618/Scouting
from os import chdir, path, getcwd
from tkinter import *
from tkinter.filedialog import askdirectory
from tkinter.ttk import *

import pickList
import scouting
import sort
from tba import getTeamEvents, isOnline

# static vars
filedir = "files"
team = 4618
events = getTeamEvents(team)

if not isOnline():
    event = "No internet connection"
else:
    event = next((iter(events.values())))  # default value


class GUI:
    def __init__(self, parent, *args):
        self.parent = parent

        # main notebook
        self.root = Notebook(parent)
        self.root.pack(expand=True, fill=BOTH)

        self.scoutingPage = scouting.ScoutingUI(self.root)
        self.pickListPage = pickList.PickList(self.root)
示例#7
0
    def selectTeamFromList(self, teamNumber):
        if not tba.isOnline():
            return
        # TODO: use team module instead
        # do we? idk? this whole thing has gone to crap and i cant wait to nuke it

        team = Team(teamNumber)
        self.currentTeam = team

        teamname = team.name

        attendedEvents = "Attended events:\n"
        for event, record in team.attendedEvents.items():
            attendedEvents += "{}:{}".format(event, record)
            attendedEvents += '\n'

        for child in self.teamInfoFrame.winfo_children():
            child.destroy()

        header = Label(self.teamInfoFrame,
                       text="Team " + str(teamNumber) + " : " + teamname,
                       font=("Helvetica", 20, "bold"))
        header.grid(row=0, column=0, columnspan=9999)

        attendedEvents = Label(self.teamInfoFrame, text=attendedEvents)
        attendedEvents.grid(row=1, column=0)

        # setup team image
        img = Image.open(team.image)

        def onImageClick(event):
            if system() == 'Darwin':  # macOS
                subCall(('open', team.image))
            elif system() == 'Windows':  # Windows
                startfile(team.image)
            else:  # linux variants
                subCall(('xdg-open', team.image))

        # 231 x 231 is about the size of our defualt image, use that as our max size
        img.thumbnail((231, 231), Image.ANTIALIAS)

        self.photo = ImageTk.PhotoImage(img)
        imgLabel = Label(self.teamInfoFrame, image=self.photo)
        imgLabel.bind(
            "<Button-1>", onImageClick
        )  # call onImageClick when mouse1 is pressed on the image
        imgLabel.grid(row=1, column=1, padx=10, pady=10)

        # display scouting data
        scoutingDataFrame = Frame(self.teamInfoFrame)
        scoutingDataFrame.grid(row=2, column=0, columnspan=2, sticky=NSEW)

        # setup scroll bars and listbox to display the data
        scrollx = Scrollbar(scoutingDataFrame, orient=HORIZONTAL)
        scrolly = Scrollbar(scoutingDataFrame)
        self.scoutingDataLB = Listbox(scoutingDataFrame,
                                      xscrollcommand=scrollx.set,
                                      yscrollcommand=scrolly.set)
        self.scoutingDataLB.bind("<Double-Button-1>", self.graph)
        scrollx.config(command=self.scoutingDataLB.xview)
        scrolly.config(command=self.scoutingDataLB.yview)

        scrollx.grid(row=1, column=0, sticky=EW)
        scrolly.grid(row=0, column=1, sticky=NS)
        self.scoutingDataLB.grid(row=0, column=0, sticky=NSEW)
        scoutingDataFrame.columnconfigure(0, weight=1)

        # setup seperate box for comments because massimo wants it
        commentsScrollx = Scrollbar(scoutingDataFrame, orient=HORIZONTAL)
        commentsScrolly = Scrollbar(scoutingDataFrame)
        commentsLB = Listbox(scoutingDataFrame,
                             xscrollcommand=commentsScrollx.set,
                             yscrollcommand=commentsScrolly.set)
        commentsScrollx.config(command=commentsLB.xview)
        commentsScrolly.config(command=commentsLB.yview)

        commentsScrollx.grid(row=3, column=0)
        commentsScrolly.grid(row=2, column=1)
        commentsLB.grid(row=2, column=0, sticky=NSEW)
        commentsLB.insert(END, "Comments:")

        # load template
        with open("template.json", "r") as f:
            template = loadJSON(f)

        # loop though our scouting data, grab each question, and display it

        # categorize our data
        # vars for ints
        totals = {}
        increments = {}

        # non-ints
        nonInts = {
        }  # going to be like this {question0:[data from match 1, match 2, match 3], question1:[...
        for key_, value_ in team.JSONdata.items():
            for key, value in value_.items():

                if key == "robot" or key == "match":
                    continue

                if type(value) is int:
                    try:
                        totals[key] += value
                        increments[key] += 1
                    except KeyError:
                        totals[key] = value
                        increments[key] = 1

                else:
                    if type(value) == bool:
                        value = "Yes" if value else "No"

                    try:
                        nonInts[key].append(value)
                    except KeyError:
                        nonInts[key] = [value]

        for key, value in totals.items():
            # find the question
            question = ""
            for i in template:
                try:
                    if i['jsonLabel'] == key:
                        question = i['question']
                except KeyError:
                    pass

            # add this question to our data output
            self.scoutingDataLB.insert(
                END, question + " : " +
                str(round((float(value) / increments[key]), 2)))

        for key, value in nonInts.items():
            # find the question
            # this is pretty similar to the previous loop and could probably be combined but at this point idk
            if key != "comments":
                question = ""
                for i in template:
                    try:
                        if i['jsonLabel'] == key:
                            question = i['question']
                    except KeyError:
                        pass

                # add it to our box/output
                self.scoutingDataLB.insert(END, question + ":")

            for i in value:
                if i.strip() != '':
                    if key == "comments":
                        commentsLB.insert(END, "    " + i)
                    else:
                        self.scoutingDataLB.insert(END, "    " + i)
示例#8
0
    def selectTeamFromTeamList(self, *args):
        if not tba.isOnline():
            return

        selected = self.teamsListBox.curselection()
        self.selectTeamFromList(self.teamsListBox.get(selected))