rev |
line source |
Ilia@6
|
1 from Tkinter import * |
Ilia@2
|
2 |
Ilia@2
|
3 class Handlers(object): |
is_rusinov@5
|
4 |
is_rusinov@8
|
5 def __init__(self, cell_size=5, delay=10, offset_x=0, offset_y=0):# cell_size is size of cell, including line width, if there is it |
is_rusinov@7
|
6 self.cell_size = cell_size |
is_rusinov@7
|
7 self.delay = delay |
Ilia@6
|
8 self.offset_x = offset_x |
Ilia@6
|
9 self.offset_y = offset_y |
is_rusinov@5
|
10 self.after_id = 0 |
is_rusinov@7
|
11 self.is_started = False |
is_rusinov@5
|
12 |
is_rusinov@5
|
13 def start(self): |
is_rusinov@8
|
14 if not self.is_started: |
is_rusinov@7
|
15 self.is_started = True |
is_rusinov@7
|
16 self.next_step() |
is_rusinov@7
|
17 self.after_id = canvas.after(self.delay, self.start) |
is_rusinov@5
|
18 |
is_rusinov@5
|
19 def stop(self): |
is_rusinov@5
|
20 self.canvas.after_cancel(self.after_id) |
is_rusinov@7
|
21 self.is_started = False |
is_rusinov@5
|
22 |
is_rusinov@5
|
23 def next_step(self): |
is_rusinov@7
|
24 automata.next_step() |
is_rusinov@5
|
25 self.draw() |
is_rusinov@5
|
26 |
is_rusinov@5
|
27 def save_file(): |
Ilia@2
|
28 pass |
is_rusinov@5
|
29 |
is_rusinov@5
|
30 def open_file(): |
Ilia@2
|
31 pass |
is_rusinov@5
|
32 |
Ilia@2
|
33 def help(): |
Ilia@2
|
34 pass |
is_rusinov@5
|
35 |
is_rusinov@5
|
36 def close_help_window |
is_rusinov@8
|
37 pass |
is_rusinov@8
|
38 |
is_rusinov@8
|
39 def zoom_in(self, zoom_rate=1): |
is_rusinov@7
|
40 if self.cell_size < 50: |
is_rusinov@8
|
41 self.cell_size = self.cell_size + zoom_rate |
is_rusinov@7
|
42 self.draw() |
is_rusinov@5
|
43 |
is_rusinov@8
|
44 def zoom_out(self, zoom_rate=1): |
is_rusinov@7
|
45 if self.cell_size > 1: |
is_rusinov@8
|
46 self.cell_size = self.cell_size - zoom_rate |
is_rusinov@7
|
47 self.draw() |
is_rusinov@5
|
48 |
is_rusinov@8
|
49 def slower(self, speed_rate=1): |
is_rusinov@7
|
50 self.delay = self.delay + speed_rate |
is_rusinov@5
|
51 |
is_rusinov@8
|
52 def faster(self, speed_rate=1): |
is_rusinov@7
|
53 if self.speed > speed_rate: |
is_rusinov@7
|
54 self.delay = self.delay - speed_rate |
is_rusinov@7
|
55 else: |
is_rusinov@7
|
56 self.delay = 0 |
is_rusinov@5
|
57 |
is_rusinov@8
|
58 def change_size(dx, dy, position=0): |
is_rusinov@8
|
59 if position < 9: |
is_rusinov@8
|
60 if position == 0 or position == 3 or position == 6: |
is_rusinov@8
|
61 automata.change_size(dx, 3) |
is_rusinov@8
|
62 elif position == 1 or position == 4 or position == 7: |
is_rusinov@8
|
63 automata.change_size(dx / 2, 3) |
is_rusinov@8
|
64 automata.change_size(dx - dx / 2, 1) |
is_rusinov@8
|
65 else |
is_rusinov@8
|
66 automata.change_size(dx, 1) |
is_rusinov@8
|
67 if position == 0 or position == 1 or position == 2: |
is_rusinov@8
|
68 automata.change_size(dy, 0) |
is_rusinov@8
|
69 elif position == 3 or position == 4 or position == 5: |
is_rusinov@8
|
70 automata.change_size(dy / 2, 0) |
is_rusinov@8
|
71 automata.change_size(dy - dy / 2, 2) |
is_rusinov@8
|
72 else |
is_rusinov@8
|
73 automata.change_size(dy, 2) |
is_rusinov@8
|
74 self.draw() |
is_rusinov@5
|
75 |
Ilia@2
|
76 def draw(): |
Ilia@2
|
77 pass |
is_rusinov@5
|
78 |
is_rusinov@7
|
79 def press1(self, event):# drawer |
Ilia@2
|
80 pass |
is_rusinov@5
|
81 |
is_rusinov@7
|
82 def motion1(self, event):# drawer |
Ilia@2
|
83 pass |
is_rusinov@5
|
84 |
is_rusinov@7
|
85 def press3(self, event):# drawer |
Ilia@2
|
86 pass |
is_rusinov@5
|
87 |
is_rusinov@7
|
88 def motion3(self, event):# drawer |
Ilia@2
|
89 pass |
is_rusinov@5
|
90 |
is_rusinov@7
|
91 def press_key1(self, event):# drawer+change_scale (B1+ctrl) |
Ilia@2
|
92 pass |
is_rusinov@5
|
93 |
is_rusinov@7
|
94 def motion_key1(self, event):# drawer+change_scale (B1+ctrl) |
Ilia@2
|
95 pass |
is_rusinov@5
|
96 |
is_rusinov@7
|
97 def press12(self, event):# zoom |
Ilia@2
|
98 pass |
is_rusinov@5
|
99 |
is_rusinov@7
|
100 def motion12(self, event):# zoom |
Ilia@2
|
101 pass |
is_rusinov@5
|
102 |
is_rusinov@8
|
103 def automata_frame(self):# show automata_frame |
is_rusinov@7
|
104 frame1.pack(side="right", fill="y", expand="no", before=canvas) |
is_rusinov@7
|
105 |
is_rusinov@8
|
106 def to_top(self):# replace choosen state to top |
is_rusinov@7
|
107 index = symbols.get(state_list.get("active").split()[1]) |
is_rusinov@7
|
108 state = states[index] |
is_rusinov@7
|
109 del states[index] |
is_rusinov@7
|
110 states.insert(0, state) |
is_rusinov@7
|
111 |
is_rusinov@8
|
112 def to_bottom(self):# replace choosen state to botton |
is_rusinov@7
|
113 index = symbols.get(state_list.get("active").split()[1]) |
is_rusinov@7
|
114 state = states[index] |
is_rusinov@7
|
115 del states[index] |
is_rusinov@7
|
116 states.append(state) |
is_rusinov@7
|
117 |
is_rusinov@8
|
118 def upwards(self): |
is_rusinov@7
|
119 index = symbols.get(state_list.get("active").split()[1]) |
is_rusinov@7
|
120 state = states[index] |
is_rusinov@7
|
121 del states[index] |
is_rusinov@7
|
122 states.insert(index - 1, state) |
is_rusinov@7
|
123 |
is_rusinov@8
|
124 def downwards(self): |
is_rusinov@7
|
125 index = symbols.get(state_list.get("active").split()[1]) |
is_rusinov@7
|
126 state = states[index] |
is_rusinov@7
|
127 del states[index] |
is_rusinov@7
|
128 states.insert(index + 1, state) |
is_rusinov@7
|
129 |
is_rusinov@8
|
130 def delete_state(self):# delete choosen state |
is_rusinov@7
|
131 index = symbols.get(state_list.get("active").split()[1]) |
is_rusinov@7
|
132 del states[index] |
is_rusinov@7
|
133 |
is_rusinov@7
|
134 def add():# add new state |
Ilia@2
|
135 pass |
is_rusinov@5
|
136 |
is_rusinov@7
|
137 def change():# change chosen state |
Ilia@2
|
138 pass |
is_rusinov@5
|
139 |
Ilia@6
|
140 |
Ilia@6
|
141 |
Ilia@6
|
142 root = Tk() |
Ilia@6
|
143 root.title("Cyclyc Cell Automata") |
Ilia@6
|
144 |
Ilia@6
|
145 canvas = Canvas(root, background="white") |
Ilia@6
|
146 canvas.config(width=500, height=400) |
Ilia@6
|
147 canvas.pack(fill="both", expand="yes") |
Ilia@6
|
148 |
Ilia@6
|
149 automata = Automata() |
Ilia@6
|
150 handlers = Handlers(1, 1, 0, 0) |
Ilia@6
|
151 |
Ilia@6
|
152 states = [] |
Ilia@6
|
153 symboles = dict() |
Ilia@6
|
154 |
Ilia@6
|
155 #infoPanel=Frame |
Ilia@6
|
156 frame1=Frame(root, background="grey") |
is_rusinov@7
|
157 state_list=Listbox(frame1, selectmode="extended") |
Ilia@6
|
158 for state in states: |
is_rusinov@7
|
159 state_list.insert("end", state) |
is_rusinov@7
|
160 state_list.pack(side="top", fill="y") |
Ilia@6
|
161 up = Button(frame1, text="Up", state="disable") |
Ilia@6
|
162 up.config(bg="red") |
Ilia@6
|
163 down = Button(frame1, text="Down", state="disable") |
Ilia@6
|
164 down.config(bg="orange") |
Ilia@6
|
165 to_top = Button(frame1, text="To Top", state="disable") |
Ilia@6
|
166 to_top.config(bg="yellow") |
Ilia@6
|
167 to_bottom = Button(frame1, text="To Bottom", state="disable") |
Ilia@6
|
168 to_bottom.config(bg="green") |
Ilia@6
|
169 hide = Button(frame1, text="hide", command=frame1.forget) |
Ilia@6
|
170 hide.config(bg="cyan") |
Ilia@6
|
171 up.pack(side="top", fill="x") |
Ilia@6
|
172 down.pack(side="top", fill="x") |
Ilia@6
|
173 to_top.pack(side="top", fill="x") |
Ilia@6
|
174 to_bottom.pack(side="top", fill="x") |
Ilia@6
|
175 hide.pack(side="bottom", fill="x") |
Ilia@6
|
176 |
Ilia@6
|
177 |
Ilia@6
|
178 menubar = Menu(root) |
Ilia@6
|
179 root.config(menu=menubar) |
Ilia@6
|
180 |
Ilia@6
|
181 menu_file = Menu(menubar) |
Ilia@6
|
182 menu_file.add_command(label="New") |
Ilia@6
|
183 menu_file.add_command(label="Open...") |
Ilia@6
|
184 menu_file.add_command(label="Save...") |
Ilia@6
|
185 menu_file.add_separator() |
Ilia@6
|
186 menu_file.add_command(label="Exit") |
Ilia@6
|
187 menubar.add_cascade(label="File", menu=menu_file) |
Ilia@6
|
188 |
Ilia@6
|
189 menu_action = Menu(menubar) |
Ilia@6
|
190 menu_action.add_command(label="Start") |
Ilia@6
|
191 menu_action.add_command(label="Stop") |
Ilia@6
|
192 menu_action.add_command(label="Next Step") |
Ilia@6
|
193 menu_action.add_command(label="Increase speed") |
Ilia@6
|
194 menu_action.add_command(label="Decrease speed") |
Ilia@6
|
195 menu_action.add_command(label="Zoom In") |
Ilia@6
|
196 menu_action.add_command(label="Zoom Out") |
Ilia@6
|
197 menu_action.add_command(label="Clean field") |
Ilia@6
|
198 menu_action.add_command(label="Fill randomly") |
Ilia@6
|
199 menubar.add_cascade(label="Action", menu=menu_action) |
Ilia@6
|
200 |
is_rusinov@7
|
201 menubar.add_command(label="Automata", command=handlers.automata_frame) |
Ilia@6
|
202 |
Ilia@6
|
203 menubar.add_command(label="Help") |
Ilia@6
|
204 |
Ilia@6
|
205 root.mainloop() |
Ilia@6
|
206
|