import json import os import tkinter as tk from tkinter import ttk path = "data/terrain.json" class TerrainsPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.activeTerrain = None self.terrainKey = tk.StringVar() self.terrainName = tk.StringVar() self.terrainSelector = ttk.Combobox(self, textvariable=self.terrainKey) self.loadTerrains() self.terrainSelector.grid(column=1, row=1, sticky="ew") self.terrainSelector.bind("<>", self.setActiveTerrain) if len(self.terrains) == 0: self.terrainSelector.state(["readonly"]) tk.Button(self, text="New Terrain", command=self.createTerrain).grid(column=4, row=1, sticky="ew") tk.Label(self, text="Name:").grid(column=1, row=3) tk.Entry(self, textvariable=self.terrainName).grid(column=2, row=3, sticky="ew") tk.Button(self, text="Save", command=self.saveTerrain).grid(column=2, row=6) def createTerrain(self): self.activeTerrain = None self.terrainSelector.selection_clear() self.terrainName.set("") def loadTerrains(self): self.terrains = {} self.terrainSelector["values"] = [] if os.path.exists(path): file = open(path, "r") self.terrains = json.loads(file.read()) file.close() self.terrainSelector["values"] = list(self.terrains.keys()) def saveTerrain(self): key = self.terrainKey.get() name = self.terrainName.get() if name != "": self.loadTerrains() terrain = { "name": name } if key != "" and key != name: del self.terrains[key] self.terrainKey.set(name) self.terrains[name] = terrain file = open(path, "w") file.write(json.dumps(self.terrains)) file.close() self.loadTerrains() def setActiveTerrain(self, event): if self.terrainKey.get() != "": self.activeTerrain = self.terrains[self.terrainKey.get()] self.terrainName.set(self.activeTerrain["name"]) else: self.terrainSelector.selection_clear()