Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/cca/annotate/082f39cbee45/Interface.py
Дата изменения: Unknown
Дата индексирования: Fri Feb 28 23:49:12 2014
Кодировка:
cca: Interface.py annotate

cca

annotate Interface.py @ 16:082f39cbee45

little corrections
author Ilia
date Sat, 04 Dec 2010 22:35:30 +0300
parents b9d58d90c534
children d2705c3ee7a7
rev   line source
Ilia@6 1 from Tkinter import *
Ilia@2 2
Ilia@2 3 class Handlers(object):
is_rusinov@5 4
Ilia@16 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
Ilia@16 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
Ilia@16 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)
Ilia@16 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)
Ilia@16 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@16 80 pass
is_rusinov@5 81
is_rusinov@7 82 def motion1(self, event):# drawer
Ilia@16 83 pass
is_rusinov@5 84
is_rusinov@7 85 def press3(self, event):# drawer
Ilia@16 86 pass
is_rusinov@5 87
is_rusinov@7 88 def motion3(self, event):# drawer
Ilia@16 89 pass
is_rusinov@5 90
Ilia@16 91 def press_key1(self, event):# drawer+change_scale (B1+ctrl)
Ilia@16 92 pass
is_rusinov@5 93
Ilia@16 94 def motion_key1(self, event):# drawer+change_scale (B1+ctrl)
Ilia@16 95 pass
is_rusinov@5 96
is_rusinov@7 97 def press12(self, event):# zoom
Ilia@16 98 pass
is_rusinov@5 99
is_rusinov@7 100 def motion12(self, event):# zoom
Ilia@16 101 pass
is_rusinov@5 102
is_rusinov@8 103 def automata_frame(self):# show automata_frame
Ilia@9 104 automata_frame.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
Ilia@16 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@16 156 automata_frame=Frame(root, background="white")
Ilia@9 157
Ilia@9 158 headline_frame=Frame(automata_frame, background="white")
Ilia@9 159 head = Label(headline_frame, text= "Automata Panel", font=16)
Ilia@9 160 head.pack(side="left", expand="yes")
Ilia@9 161 hide = Button(headline_frame, text="X", command=automata_frame.forget)
Ilia@9 162 hide.config(bg="grey")
Ilia@9 163 hide.pack(side="right")
Ilia@9 164 headline_frame.pack(side="top",fill="both", expand="no")
Ilia@9 165
Ilia@9 166 Label(automata_frame, text= "State Box:").pack(side="top", fill="x")
Ilia@9 167 state_list=Listbox(automata_frame, selectmode="extended")
Ilia@6 168 for state in states:
is_rusinov@7 169 state_list.insert("end", state)
is_rusinov@7 170 state_list.pack(side="top", fill="y")
Ilia@16 171 up = Button(automata_frame, text="Up", state="disabled")
Ilia@6 172 up.config(bg="red")
Ilia@16 173 down = Button(automata_frame, text="Down", state="disabled")
Ilia@6 174 down.config(bg="orange")
Ilia@16 175 to_top = Button(automata_frame, text="To Top", state="disabled")
Ilia@6 176 to_top.config(bg="yellow")
Ilia@16 177 to_bottom = Button(automata_frame, text="To Bottom", state="disabled")
Ilia@6 178 to_bottom.config(bg="green")
Ilia@16 179 delete = Button(automata_frame, text="Delete", state="disabled")
Ilia@9 180 delete.config(bg="cyan")
Ilia@6 181 up.pack(side="top", fill="x")
Ilia@6 182 down.pack(side="top", fill="x")
Ilia@6 183 to_top.pack(side="top", fill="x")
Ilia@6 184 to_bottom.pack(side="top", fill="x")
Ilia@9 185 delete.pack(side="top", fill="x")
Ilia@6 186
Ilia@6 187
Ilia@9 188 information = Label(automata_frame, text= "Information of State")
Ilia@9 189 information.pack(side="top", fill="x")
Ilia@9 190 info_frame=Frame(automata_frame, background="white")
Ilia@9 191 Label(info_frame, text="Name").grid(row=0, column=0)
Ilia@9 192 state_name = Entry(info_frame)
Ilia@9 193 state_name.grid(row=0, column=1)
Ilia@9 194 Label(info_frame, text="Symbol").grid(row=1, column=0)
Ilia@9 195 state_symbol = Entry(info_frame)
Ilia@9 196 state_symbol.grid(row=1, column=1)
Ilia@9 197 Label(info_frame, text="Color").grid(row=2, column=0)
Ilia@9 198 state_color = Entry(info_frame)
Ilia@9 199 state_color.grid(row=2, column=1)
Ilia@9 200 Label(info_frame, text="Key").grid(row=3, column=0)
Ilia@9 201 state_key = Entry(info_frame)
Ilia@9 202 state_key.grid(row=3, column=1)
Ilia@9 203 info_frame.pack(side="top")
Ilia@9 204
Ilia@9 205
Ilia@9 206 condition = Label(automata_frame, text= "Condition of conversion")
Ilia@9 207 condition.pack(side="top", fill="x")
Ilia@9 208 condition_frame=Frame(automata_frame, background="white")
Ilia@9 209 Label(condition_frame, text="0: ").grid(row=0, column=0)
Ilia@9 210 check_box_0 = Checkbutton(condition_frame)
Ilia@9 211 check_box_0.grid(row=0, column=1)
Ilia@9 212 Label(condition_frame, text="1: ").grid(row=0, column=2)
Ilia@9 213 check_box_1 = Checkbutton(condition_frame)
Ilia@9 214 check_box_1.grid(row=0, column=3)
Ilia@9 215 Label(condition_frame, text="2: ").grid(row=0, column=4)
Ilia@9 216 check_box_2 = Checkbutton(condition_frame)
Ilia@9 217 check_box_2.grid(row=0, column=5)
Ilia@9 218 Label(condition_frame, text="3: ").grid(row=1, column=0)
Ilia@9 219 check_box_0 = Checkbutton(condition_frame)
Ilia@9 220 check_box_0.grid(row=1, column=1)
Ilia@9 221 Label(condition_frame, text="4: ").grid(row=1, column=2)
Ilia@9 222 check_box_1 = Checkbutton(condition_frame)
Ilia@9 223 check_box_1.grid(row=1, column=3)
Ilia@9 224 Label(condition_frame, text="5: ").grid(row=1, column=4)
Ilia@9 225 check_box_2 = Checkbutton(condition_frame)
Ilia@9 226 check_box_2.grid(row=1, column=5)
Ilia@9 227 Label(condition_frame, text="6: ").grid(row=2, column=0)
Ilia@9 228 check_box_0 = Checkbutton(condition_frame)
Ilia@9 229 check_box_0.grid(row=2, column=1)
Ilia@9 230 Label(condition_frame, text="7: ").grid(row=2, column=2)
Ilia@9 231 check_box_1 = Checkbutton(condition_frame)
Ilia@9 232 check_box_1.grid(row=2, column=3)
Ilia@9 233 Label(condition_frame, text="8: ").grid(row=2, column=4)
Ilia@9 234 check_box_2 = Checkbutton(condition_frame)
Ilia@9 235 check_box_2.grid(row=2, column=5)
Ilia@9 236 condition_frame.pack(side="top")
Ilia@9 237
Ilia@9 238
Ilia@16 239 add_state = Button(automata_frame, text="ADD", state="disabled")
Ilia@9 240 add_state.config(bg="blue")
Ilia@16 241 change_state = Button(automata_frame, text="Change", state="disabled")
Ilia@9 242 change_state.config(bg="violet")
Ilia@9 243 add_state.pack(side="top", fill="x")
Ilia@9 244 change_state.pack(side="top", fill="x")
Ilia@9 245
Ilia@9 246 error=Label(automata_frame)
Ilia@9 247 error.pack(side="top", fill="x")
is_rusinov@8 248
is_rusinov@8 249
Ilia@12 250 side = 0
Ilia@12 251
Ilia@12 252 size_window = Toplevel(root)
Ilia@12 253 size_window.title("")
Ilia@13 254 size_window.withdraw()
Ilia@12 255 size_window.protocol("WM_DELETE_WINDOW", handlers.hide_size_window)
Ilia@12 256 Label(size_window, text= "Current size of window:").pack(side="top", fill="x")
Ilia@16 257 size = Label(size_window, text= str(len(automata.field)) + " x " + str(len(automata.field[0])))
Ilia@16 258 size.pack(side="top", fill="x")
Ilia@12 259 Label(size_window, text= "New size:").pack(side="top", fill="x")
Ilia@12 260 new_size = Frame(size_window)
Ilia@12 261 size_x = Entry(new_size, width=5)
Ilia@12 262 size_x.grid(row=0, column=0)
Ilia@12 263 Label(new_size, text=" x ").grid(row=0, column=1)
Ilia@12 264 size_y = Entry(new_size, width=5)
Ilia@12 265 size_y.grid(row=0, column=2)
Ilia@12 266 new_size.pack(side="top")
Ilia@12 267 Label(size_window, text= "Expansion of window:").pack(side="top", fill="x")
Ilia@12 268 expansion = Frame(size_window)
Ilia@12 269 r0 = Radiobutton(expansion, variable=side, value = 0, indicatoron=0, width=2, height=1)
Ilia@12 270 r0.select()
Ilia@12 271 r0.grid(row=0, column=0)
Ilia@12 272 r1 = Radiobutton(expansion, variable=side, value = 1, indicatoron=0, width=2, height=1)
Ilia@12 273 r1.grid(row=0, column=1)
Ilia@12 274 r2 = Radiobutton(expansion, variable=side, value = 2, indicatoron=0, width=2, height=1)
Ilia@12 275 r2.grid(row=0, column=2)
Ilia@12 276 r3 = Radiobutton(expansion, variable=side, value = 3, indicatoron=0, width=2, height=1)
Ilia@12 277 r3.grid(row=1, column=0)
Ilia@12 278 r4 = Radiobutton(expansion, variable=side, value = 4, indicatoron=0, width=2, height=1)
Ilia@12 279 r4.grid(row=1, column=1)
Ilia@12 280 r5 = Radiobutton(expansion, variable=side, value = 5, indicatoron=0, width=2, height=1)
Ilia@12 281 r5.grid(row=1, column=2)
Ilia@12 282 r6 = Radiobutton(expansion, variable=side, value = 6, indicatoron=0, width=2, height=1)
Ilia@12 283 r6.grid(row=2, column=0)
Ilia@12 284 r7 = Radiobutton(expansion, variable=side, value = 7, indicatoron=0, width=2, height=1)
Ilia@12 285 r7.grid(row=2, column=1)
Ilia@12 286 r8 = Radiobutton(expansion, variable=side, value = 8, indicatoron=0, width=2, height=1)
Ilia@12 287 r8.grid(row=2, column=2)
Ilia@12 288 expansion.pack(side="top")
Ilia@12 289 Label(size_window).pack(side="top", fill="x")
Ilia@12 290 apply_frame = Frame(size_window, padx=10, pady=5)
Ilia@12 291 apply_size = Button(apply_frame, text="Apply")
Ilia@12 292 apply_size.config(bg="yellow")
Ilia@12 293 apply_size.pack(side="left", fill="x")
Ilia@12 294 close_size = Button(apply_frame, text="Close", command=handlers.hide_size_window)
Ilia@12 295 close_size.config(bg="green")
Ilia@12 296 close_size.pack(side="right", fill="x")
Ilia@12 297 apply_frame.pack(side="top", fill="x")
Ilia@12 298
Ilia@6 299 menubar = Menu(root)
Ilia@6 300 root.config(menu=menubar)
Ilia@6 301
Ilia@6 302 menu_file = Menu(menubar)
Ilia@6 303 menu_file.add_command(label="New")
Ilia@9 304 menu_file.add_command(label="Open...", command=handlers.open_file)
Ilia@9 305 menu_file.add_command(label="Save...", command=handlers.save_file)
Ilia@6 306 menu_file.add_separator()
Ilia@9 307 menu_file.add_command(label="Exit", command=root.destroy)
Ilia@6 308 menubar.add_cascade(label="File", menu=menu_file)
Ilia@6 309
Ilia@6 310 menu_action = Menu(menubar)
Ilia@9 311 menu_action.add_command(label="Start", command=handlers.start)
Ilia@9 312 menu_action.add_command(label="Stop", command=handlers.stop)
Ilia@9 313 menu_action.add_command(label="Next Step", command=handlers.next_step)
Ilia@12 314 menu_action.add_separator()
Ilia@9 315 menu_action.add_command(label="Increase speed", command=handlers.faster)
Ilia@9 316 menu_action.add_command(label="Decrease speed", command=handlers.slower)
Ilia@12 317 menu_action.add_separator()
Ilia@9 318 menu_action.add_command(label="Zoom In", command=handlers.zoom_in)
Ilia@9 319 menu_action.add_command(label="Zoom Out", command=handlers.zoom_out)
Ilia@12 320 menu_action.add_separator()
Ilia@6 321 menu_action.add_command(label="Clean field")
Ilia@6 322 menu_action.add_command(label="Fill randomly")
Ilia@13 323 menu_action.add_separator()
Ilia@12 324 menu_action.add_command(label="Change size",command=handlers.show_size_window)
Ilia@6 325 menubar.add_cascade(label="Action", menu=menu_action)
Ilia@6 326
is_rusinov@7 327 menubar.add_command(label="Automata", command=handlers.automata_frame)
Ilia@6 328
Ilia@12 329 menubar.add_command(label="Help", command=handlers.help)
Ilia@6 330
Ilia@6 331 root.mainloop()
Ilia@6 332