#builtins import tkinter as Tk from tkinter import ttk as Ttk from tkinter import font from os import path #packages from PIL import ImageTk, Image #custom stuff from storage import readSave, save import api, ui #load icon icoPng = Image.open(path.join("assets","babynet.png")) #initialize root root = Tk.Tk() root.title("SPASESHUPS") ico = ImageTk.PhotoImage(icoPng) root.wm_iconphoto(False, ico) #add the three main sections #header contains auth keys and such headerFrame = ui.Container(root, freezeCols=1) headerFrame.widget.grid(row=0, column=0, sticky='new') #requestFrame is the main body where the request buttons will be requestFrame = ui.Container(root) requestFrame.widget.grid(row=1, column=0, sticky='nesw') #response frame is where the output lives responseFrame = ui.Container(root) responseFrame.widget.grid(row=2, column=0, sticky="snew") #populate the header accToken = Tk.StringVar() accAuthBox = ui.SavedEntryBox(headerFrame.widget, 'acc_token', accToken) Ttk.Label(headerFrame.widget, text="ACCOUNT TOKEN:").grid(row=0, column=0, sticky='e') accAuthBox.widget.grid(row=0, column=1, columnspan=5, sticky='ew') agentToken = Tk.StringVar() agentAuthBox = ui.SavedEntryBox(headerFrame.widget, 'active_agent_token', agentToken) Ttk.Label(headerFrame.widget, text="AGENT TOKEN:").grid(row=1, column=0, sticky='e') agentAuthBox.widget.grid(row=1, column=1, columnspan=5, sticky='ew') #freeze the label column headerFrame.widget.columnconfigure(0, weight=0) #populate and style the response frame resLabel = Tk.Text(responseFrame.widget, background='grey17', foreground='white') resLabel.grid(row=0, column=0, sticky='news') resLabel.insert('1.0', "Awaiting call...") resLabel['state'] = 'disabled' resScrollbarV = Ttk.Scrollbar(responseFrame.widget, orient='vertical', command=resLabel.yview) resLabel.configure(yscrollcommand=resScrollbarV.set) resScrollbarV.grid(row=0, column=1, rowspan=2, sticky='ns') def updateResponse(newText): resLabel['state'] = 'normal' resLabel.delete('1.0', 'end') resLabel.insert('1.0', newText) resLabel['state'] = 'disabled' Ttk.Style().configure('Shaded.TFrame', background='grey17') responseFrame.widget.configure(borderwidth=2, relief='groove', style='Shaded.TFrame') #populate the request frame makeFrame = ui.RequesterFrame(requestFrame.widget, 'CREATE') makeFrame.widget.grid(row=0, column=0, sticky='nsew') #new agent callsignVar = Tk.StringVar() factionVar = Tk.StringVar() ui.FieldLabel(makeFrame.widget, 'Callsign:', 1) ui.EntryBox(makeFrame.widget, callsignVar).widget.grid(row=1, column=2, sticky='ew') ui.FieldLabel(makeFrame.widget, 'Faction Name:', 2) ui.EntryBox(makeFrame.widget, factionVar).widget.grid(row=2, column=2, sticky='ew') def newAgent(args): resCode, resData = api.newAgent(*args) updateResponse(ui.formatResponse(resCode, resData)) try: agentToken.set(resData['token']) if int(resCode) < 300: agentAuthBox.saveValue() except: pass return resCode, resData newAgentButton = ui.ApiButton(makeFrame.widget, 'NEW AGENT', 3, newAgent, (accToken, callsignVar, factionVar)) viewFrame = ui.RequesterFrame(requestFrame.widget, 'VIEW') viewFrame.widget.grid(row=0, column=1, sticky='nesw') #view agent def viewAgent(args): resCode, resData = api.viewAgent(*args) updateResponse(ui.formatResponse(resCode, resData)) return resCode, resData viewAgentButton = ui.ApiButton(viewFrame.widget, 'VIEW AGENT', 2, viewAgent, (agentToken)) useFrame = ui.RequesterFrame(requestFrame.widget, 'USE') useFrame.widget.grid(row=0, column=2, sticky='nsew') #finalize the layout makeFrame.finalize() useFrame.finalize() viewFrame.finalize() headerFrame.finalize() requestFrame.finalize() #response frame finalize doesnt help much so do it manually responseFrame.widget.grid_rowconfigure(0, weight=1) responseFrame.widget.grid_columnconfigure(0, weight=1) responseFrame.widget.grid_columnconfigure(1, weight=0) for child in root.winfo_children(): child.grid_configure(padx = 5, pady = 5) #sort out scaling for the top 3 frames root.columnconfigure(0, weight=1) root.rowconfigure(0, weight=0) root.rowconfigure(1, weight=1) root.rowconfigure(2, weight=1, minsize=300) #aaaand go root.mainloop()