-
Notifications
You must be signed in to change notification settings - Fork 0
/
ww_main.py
152 lines (111 loc) · 4.42 KB
/
ww_main.py
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import tkinter as tk
from tkinter import *
import ww_config
root = Tk()
import ww_display # this has to be below the "root =Tk()" line, or else it causes a 2nd window to open
root.title("Wireworld")
class TitleLabel(tk.Label):
instancelist = []
def __init__(self, text):
super().__init__()
TitleLabel.instancelist.append(self)
self["text"] = text
self.configure(font=("Arial", 20))
class ErrorLabel(tk.Label):
instancelist = []
def __init__(self, text):
super().__init__()
ErrorLabel.instancelist.append(self)
self.contents = tk.StringVar()
self.contents.set(text)
self["textvariable"] = self.contents
self.configure(font=("Arial", 20))
class FileEntryBox(tk.Entry):
instancelist = []
def __init__(self):
FileEntryBox.instancelist.append(self)
super().__init__()
self["width"] = 30
self.contents = tk.StringVar()
self.contents.set("")
self["textvariable"] = self.contents
self.bind("<Key-Return>", self.printfile)
self.configure(font=("Arial", 20))
def printfile(self, x):
filename = self.contents.get()
if filename != "":
error = ww_config.main(filename)
if isinstance(error, str):
[instance.destroy() for instance in ErrorLabel.instancelist]
ErrorLabel(error).grid(column=0, row=2, padx=10, pady=10, columnspan=3, sticky=tk.W + tk.E)
else:
destroyall()
ww_display.setup(error)
class NumEnterBox(tk.Spinbox):
instancelist = []
def __init__(self, coord):
NumEnterBox.instancelist.append(self)
super().__init__()
self.coord = coord
self["width"] = 12
self["to"] = 100
self["from"] = 5
self.contents = tk.StringVar()
self.contents.set(8)
self["textvariable"] = self.contents
self.bind("<Key-Return>", numsubmit)
self.configure(font=("Arial", 18))
def returnval(self, requested):
if self.coord == "x":
if requested == "x":
return self.contents.get()
if self.coord == "y":
if requested == "y":
return self.contents.get()
class NumEnterSubmit(tk.Button):
instancelist = []
def __init__(self):
super().__init__()
NumEnterSubmit.instancelist.append(self)
self["text"] = "Submit"
self.bind("<Button-1>", numsubmit)
self.bind("<space>", )
self.configure(font=("Arial", 18))
def numsubmit(x):
gridx = [instance.returnval("x") for instance in NumEnterBox.instancelist]
gridy = [instance.returnval("y") for instance in NumEnterBox.instancelist]
gridx = gridx[0]
gridy = gridy[1]
if int(gridx) < 5:
gridx = 5
if int(gridy) < 5:
gridy = 5
destroyall()
array = [[0 for col in range(int(gridx))] for row in range(int(gridy))] # creates array of 0s of specified size
ww_display.setup(array)
def destroyall():
allinst = (ErrorLabel.instancelist + FileEntryBox.instancelist + TitleLabel.instancelist
+ NumEnterBox.instancelist + NumEnterSubmit.instancelist)
[instance.destroy() for instance in allinst]
def close():
# root.destroy()
quit()
def main():
TitleLabel("Please enter the config file name").grid(column=0, row=0, padx=10, pady=10,
columnspan=3, sticky=tk.W + tk.E)
FileEntryBox().grid(column=0, row=1, padx=10, pady=10, columnspan=3, sticky=tk.W + tk.E)
ErrorLabel("").grid(column=0, row=2, padx=10, pady=10, columnspan=3, sticky=tk.W + tk.E)
TitleLabel("Alternatively, enter the dimensions for an empty grid").grid(column=0, row=3, padx=10, pady=10,
columnspan=3, sticky=tk.W + tk.E)
NumEnterBox("x").grid(column=0, row=4, padx=10, pady=10)
NumEnterBox("y").grid(column=1, row=4, padx=10, pady=10)
NumEnterSubmit().grid(column=2, row=4, padx=10, pady=10)
root.protocol("WM_DELETE_WINDOW", close)
root.bind(")", lambda event: ww_display.paint(0))
root.bind("!", lambda event: ww_display.paint(1))
root.bind('"', lambda event: ww_display.paint(2))
root.bind("<sterling>", lambda event: ww_display.paint(3))
root.bind("<Escape>", lambda event: ww_display.paint("esc"))
root.mainloop()
while 0 != 1:
main()