import json import os import tkinter as tk from tkinter import ttk from tkinter import messagebox path = "data/team.json" class TeamsPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.activeTeam = None self.teamKey = tk.StringVar() self.teamName = tk.StringVar() self.teamCountry = tk.StringVar() self.teamMembers = [] self.teamSelector = ttk.Combobox(self, textvariable=self.teamKey) self.loadTeams() self.teamSelector.grid(column=1, row=1, sticky="ew") self.teamSelector.bind("<>", self.setActiveTeam) tk.Button(self, text="Delete", command=self.deleteTeam).grid(column=2, row=1, sticky="w") if len(self.teams) == 0: self.teamSelector.state(["readonly"]) tk.Button(self, text="New Team", command=self.createTeam).grid(column=4, row=1, sticky="ew") tk.Label(self, text="Name:").grid(column=1, row=3) tk.Entry(self, textvariable=self.teamName).grid(column=2, row=3, sticky="ew") tk.Label(self, text="Country:").grid(column=1, row=4) tk.Entry(self, textvariable=self.teamCountry).grid(column=2, row=4, sticky="ew") tk.Label(self, text="Members:").grid(column=1, row=5) self.teamMembersGrid = ttk.Frame(self) self.teamMembersGrid.grid(column=2, row=5) tk.Button(self, text="Save", command=self.saveTeam).grid(column=2, row=6) def createTeam(self): self.activeTeam = None self.teamSelector.selection_clear() self.teamKey.set("") self.teamName.set("") self.teamCountry.set("") self.teamMembers = [] self.renderTeamMembers() def loadTeams(self): self.teams = {} self.teamSelector["values"] = [] if os.path.exists(path): file = open(path, "r") self.teams = json.loads(file.read()) file.close() self.teamSelector["values"] = list(self.teams.keys()) def deleteTeam(self): key = self.teamKey.get() confirmed = messagebox.askyesno( message="Are you sure you want to delete team " + key + "?", icon="question", title="Delete") if confirmed: self.loadTeams() del self.teams[key] file = open(path, "w") file.write(json.dumps(self.teams)) file.close() self.loadTeams() self.createTeam() def saveTeam(self): key = self.teamKey.get() name = self.teamName.get() country = self.teamCountry.get() members = self.teamMembers if name != "" and country != "": self.loadTeams() team = { "name": name, "country": country, "members": members } if key != "" and key != name: del self.teams[key] self.teamKey.set(name) self.teams[name] = team file = open(path, "w") file.write(json.dumps(self.teams)) file.close() self.loadTeams() def setActiveTeam(self, event): if self.teamKey.get() != "": self.activeTeam = self.teams[self.teamKey.get()] self.teamName.set(self.activeTeam["name"]) self.teamCountry.set(self.activeTeam["country"]) self.teamMembers = self.activeTeam["members"] self.renderTeamMembers() else: self.teamSelector.selection_clear() def renderTeamMembers(self): self.teamMembersGrid.destroy() self.teamMembersGrid = ttk.Frame(self) self.teamMembersGrid.grid(column=2, row=5) row = 1 for m in self.teamMembers: tk.Label(self.teamMembersGrid, text=m["name"]).grid(column=1, row=row) tk.Label(self.teamMembersGrid, text=m["army"]).grid(column=2, row=row) tk.Button(self.teamMembersGrid, text="X", command=lambda: self.removeTeamMember(m)).grid(column=3, row=row) row += 1 self.newTeamMemberName = tk.StringVar() self.newTeamMemberArmy = tk.StringVar() tk.Entry(self.teamMembersGrid, textvariable=self.newTeamMemberName).grid(column=1, row=row) tk.Entry(self.teamMembersGrid, textvariable=self.newTeamMemberArmy).grid(column=2, row=row) tk.Button(self.teamMembersGrid, text="+", command=self.addTeamMember).grid(column=3, row=row) def addTeamMember(self): name = self.newTeamMemberName.get() army = self.newTeamMemberArmy.get() if name != "" and army != "": self.teamMembers.append({ "name": name, "army": army, }) self.renderTeamMembers() def removeTeamMember(self, member): self.teamMembers.remove(member) self.renderTeamMembers()