aosworlds-pairing/team.py

144 lines
4.9 KiB
Python
Raw Normal View History

2023-02-14 19:54:53 +00:00
import json
import os
2023-02-15 23:19:12 +00:00
import tkinter as tk
2023-02-14 19:54:53 +00:00
from tkinter import ttk
2023-02-19 19:19:58 +00:00
from tkinter import messagebox
2023-02-14 19:54:53 +00:00
2023-02-15 23:19:12 +00:00
path = "data/team.json"
class TeamsPage(tk.Frame):
2023-02-14 19:54:53 +00:00
def __init__(self, parent, controller):
2023-02-15 23:19:12 +00:00
tk.Frame.__init__(self, parent)
2023-02-18 20:15:31 +00:00
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()
2023-02-14 19:54:53 +00:00
2023-02-18 20:15:31 +00:00
self.teamSelector.grid(column=1, row=1, sticky="ew")
self.teamSelector.bind("<<ComboboxSelected>>", self.setActiveTeam)
2023-02-19 19:19:58 +00:00
tk.Button(self, text="Delete", command=self.deleteTeam).grid(column=2, row=1, sticky="w")
2023-02-14 19:54:53 +00:00
2023-02-18 20:15:31 +00:00
if len(self.teams) == 0:
self.teamSelector.state(["readonly"])
2023-02-14 19:54:53 +00:00
2023-02-18 20:15:31 +00:00
tk.Button(self, text="New Team", command=self.createTeam).grid(column=4, row=1, sticky="ew")
2023-02-14 19:54:53 +00:00
2023-02-18 20:15:31 +00:00
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()
2023-02-19 19:19:58 +00:00
self.teamKey.set("")
2023-02-18 20:15:31 +00:00
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())
2023-02-19 19:19:58 +00:00
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()
2023-02-18 20:15:31 +00:00
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()
2023-02-14 19:54:53 +00:00
2023-02-18 20:15:31 +00:00
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
2023-02-14 19:54:53 +00:00
2023-02-18 20:15:31 +00:00
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,
})
2023-02-14 19:54:53 +00:00
2023-02-18 20:15:31 +00:00
self.renderTeamMembers()
2023-02-14 19:54:53 +00:00
2023-02-18 20:15:31 +00:00
def removeTeamMember(self, member):
self.teamMembers.remove(member)
self.renderTeamMembers()