aosworlds-pairing/terrain.py

73 lines
2.2 KiB
Python
Raw Normal View History

2023-02-18 20:15:31 +00:00
import json
import os
2023-02-15 23:19:12 +00:00
import tkinter as tk
2023-02-18 20:15:31 +00:00
from tkinter import ttk
path = "data/terrain.json"
2023-02-14 19:54:53 +00:00
2023-02-15 23:19:12 +00:00
class TerrainsPage(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.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("<<ComboboxSelected>>", self.setActiveTerrain)
if len(self.terrains) == 0:
self.terrainSelector.state(["readonly"])
2023-02-14 19:54:53 +00:00
2023-02-18 20:15:31 +00:00
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()