Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- try:
- import tkinter as tk
- except:
- print("Strive: module 'tkinter' is required")
- import json
- windows = {}
- events_windows = []
- def add_window(filename):
- content = open(filename,"r").read()
- parsed = json.loads(content)
- windows[parsed["id"]] = filename
- def add_event_to_window(window,event,function):
- events_windows.append({
- "window": window,
- "event": event,
- "function": function
- })
- def show_window(id):
- filename = windows[id]
- content = open(filename,"r").read()
- parsed = json.loads(content)
- widgets = parsed["widgets"]
- event_onWidgetsLoaded = None
- event_onWindowLoaded = None
- event_onWindowConfigSet = None
- for event in events_windows:
- if event["window"] == id:
- if event["event"] == "onWidgetsLoaded":
- event_onWidgetsLoaded = event["function"]
- elif event["event"] == "onWindowLoaded":
- event_onWindowLoaded = event["function"]
- elif event["event"] == "onWindowConfigSet":
- event_onWindowConfigSet = event["function"]
- exec(f"global {id};{id} = tk.Tk()")
- if "title" in parsed:
- exec(f"{id}.title(\"{parsed['title']}\")")
- else:
- exec(f"{id}.title(\"Strive Window\")")
- if "width" in parsed and "height" in parsed:
- exec(f"{id}.geometry(\"{str(parsed['width'])}x{str(parsed['height'])}\")")
- else:
- exec(f"{id}.geometry(\"500x500\")")
- if event_onWindowLoaded:
- event_onWindowLoaded()
- for widget in widgets:
- exec(f"global {widget['id']};{widget['id']} = tk.{widget['type']}({id})")
- for setting in widget:
- if setting not in ["type","id","position"]:
- if widget[setting] not in ["True","False"] and not isinstance(widget[setting],int):
- exec(f"{widget['id']}[\"{setting}\"] = \"{widget[setting]}\"")
- else:
- exec(f"{widget['id']}[\"{setting}\"] = {widget[setting]}")
- elif setting == "position":
- pos = widget["position"]
- pos_func = f"{widget['id']}.{pos['mode']}("
- for pos_setting in pos:
- if pos_setting != "mode":
- if isinstance(pos[pos_setting],str):
- pos_func += f"{pos_setting}=\"{pos[pos_setting]}\""
- else:
- pos_func += f"{pos_setting}={pos[pos_setting]}"
- if pos_setting != list(pos)[-1]:
- pos_func += ","
- pos_func += ")"
- exec(pos_func)
- if event_onWidgetsLoaded:
- event_onWidgetsLoaded()
- config = parsed["config"]
- config_func = f"{id}.config("
- for configuration in config:
- for setting in configuration:
- if setting != "attribute":
- if isinstance(configuration[setting],str):
- config_func += f"{configuration['attribute']}=\"{configuration['value']}\""
- else:
- config_func += f"{configuration['attribute']}={configuration['value']}"
- if setting != list(configuration)[-1]:
- config_func += ","
- config_func += ")"
- exec(config_func)
- if event_onWindowConfigSet:
- event_onWindowConfigSet()
- exec(f"{id}.mainloop()")
- def hide_window(window):
- exec(f"{window}.destroy()")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement