-
Notifications
You must be signed in to change notification settings - Fork 0
/
scheme.py
83 lines (80 loc) · 3.62 KB
/
scheme.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
from diagram import *
class Scheme:
def __init__(self, alphabet:str, state_number:str, main_frame: Frame):
self.alphabet = alphabet
self.state_number = int(state_number)
self.main_frame = main_frame
self.group_list = []
self.state_list = []
self.alphabet_list = self.alphabet.replace(" ", "").split(",")
self.diagram = {}
self._create_scheme()
def _clear_frame(self):
for widget in self.main_frame.winfo_children():
widget.destroy()
def _create_scheme(self):
state_number = self.state_number
frame = self.main_frame
column_amount = len(self.alphabet_list) * 2 + 1
row_amount = state_number + 2
index = 0
alphabet_char = 0
for _ in range(len(self.alphabet_list)):
self.diagram[f"{self.alphabet_list[_]}"] = {}
for y in range(state_number):
self.diagram[f"{self.alphabet_list[_]}"][f"q{y}"] = {}
for _ in range(state_number):
self.state_list.append(f"q{_}")
body_list = []
self._clear_frame()
for i in range(row_amount):
for j in range(column_amount):
if i == 0:
if j % 2 == 0:
alphabet_char = alphabet_char + 1
continue
else:
new_title = Label(master=frame, text=f"After input {self.alphabet_list[j - alphabet_char]}")
new_title.grid(row=i, column=j, columnspan=2)
elif i == 1:
if j == 0:
new_title = Label(master=frame, text="Old State")
new_title.grid(row=i, column=j)
elif j % 2 == 0:
new_title = Label(master=frame, text="Output")
new_title.grid(row=i, column=j)
else:
new_title = Label(master=frame, text="New State")
new_title.grid(row=i, column=j)
else:
if j == 0:
new_title = Label(master=frame, text=f"q{i - 2}")
new_title.grid(row=i, column=j)
elif j % 2 == 0:
new_value = Entry(master=frame, highlightthickness=1)
new_value.grid(row=i, column=j)
body_list.append([new_value, index])
index = index + 1
else:
state = ttk.Combobox(master=frame, values=self.state_list)
state.grid(row=i, column=j)
body_list.append([state, index])
values = set(map(lambda x: x[1], body_list))
self.group_list = [[y[0] for y in body_list if y[1] == x] for x in values]
table_button = Button(master=frame, text="Create Diagram", command=self._create_diagram)
table_button.grid(column=column_amount, row=row_amount)
def _create_diagram(self):
DiagramImage(diagram=self._create_table(), number=self.state_number, frame=self.main_frame)
def _create_table(self)->dict:
x = 0
p = 0
for w in self.diagram:
for z in range(len(self.state_list)):
self.diagram[w][f"q{z}"]["new_state"] = self.group_list[p + z + ((len(
self.alphabet_list) - 1) * x)][0].get()
self.diagram[w][f"q{z}"]["output"] = self.group_list[p + z + ((len(
self.alphabet_list) - 1) * x)][1].get()
x = x + 1
p = p + 1
x = 0
return self.diagram