-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathctk.mojo
116 lines (79 loc) · 2.68 KB
/
ctk.mojo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from python import Python
from api_client import call
struct State:
var prompt: String
var code: String
fn __init__(inout self):
self.prompt = ""
self.code = ""
fn set_prompt(inout self, prompt: String):
self.prompt = prompt
fn set_code(inout self, code: String):
self.code = code
def main():
# "Imports"
Python.add_to_path(".")
let ctk = Python.import_module("ctk")
let tk = Python.import_module("tkinter")
let helpers = Python.import_module("helpers")
let os = Python.import_module("os")
let app = ctk.app
# Mojo App State
var state = State()
let cases = Python.dict()
# Configure Window
app.title("LangTrain")
app.geometry("800x1100")
let title = ctk.CTkLabel("LangTrain", 0, 10, ("", 50), 300, tk.N)
title.pack()
let promptLabel = ctk.CTkLabel("Code Prompt:", 0, 10, ("", 10), 700, tk.W)
promptLabel.pack()
# Add Window Elements
let prompt = ctk.CTkTextbox(100, 700)
prompt.pack()
ctk.CTkSpacer().pack()
let generatedCode = ctk.CTkLabel("GeneratedCode:", 0, 10, ("", 10), 700, tk.W)
generatedCode.pack()
# Add Window Elements
let codeBlock = ctk.CTkTextbox(400, 700)
codeBlock.pack()
ctk.CTkSpacer().pack()
let outputLabel = ctk.CTkLabel("Output:", 0, 10, ("", 10), 700, tk.W)
outputLabel.pack()
let output = ctk.CTkTextbox(100, 700)
output.pack()
ctk.CTkSpacer().pack()
let button = ctk.CTkButton("Generate Code", 300)
button.pack()
ctk.CTkSpacer().pack()
let run = ctk.CTkButton("Run", 300)
run.pack()
ctk.CTkSpacer().pack()
let save = ctk.CTkButton("Save", 300)
save.pack()
# Run Loop
while True:
app.update()
let prompt = prompt.get_text().to_string()
state.set_prompt(prompt)
let code = codeBlock.get_text().to_string()
state.set_code(code)
if button.get_clicked():
let response = call(state.prompt)
codeBlock.delete('1.0', tk.END)
codeBlock.insert('1.0', response)
print(state.prompt)
button.reset()
if save.get_clicked():
cases[state.prompt] = code
json = helpers.convert_to_json(cases.items())
with open("./cases.json", "w") as f:
f.write(json.to_string())
save.reset()
if run.get_clicked():
with open("./code.js", "w") as f:
f.write(state.code)
outcome = os.system("bash ./interpreters/jsInterpreter.sh")
output.delete('1.0', tk.END)
output.insert('1.0', outcome)
run.reset()