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