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

cca

annotate Interface.py @ 58:dd3e42d72f44

state_list change handlers and fill of entries
author is_rusinov
date Wed, 08 Dec 2010 02:33:39 +0300
parents 9bc9d3b37525
children 9a80d2c6acbf
rev   line source
Ilia@6 1 from Tkinter import *
Ilia@2 2
is_rusinov@18 3 from State import *
is_rusinov@18 4 from Automata import *
is_rusinov@18 5
is_rusinov@18 6
Ilia@2 7 class Handlers(object):
is_rusinov@5 8
is_rusinov@54 9 def __init__(self, cell_size=8, line_width=1 ,delay=10, offset_x=0, offset_y=0):# cell_size is size of cell, including line width, if there is it
is_rusinov@7 10 self.cell_size = cell_size
is_rusinov@18 11 self.line_width = line_width
is_rusinov@7 12 self.delay = delay
Ilia@6 13 self.offset_x = offset_x
Ilia@6 14 self.offset_y = offset_y
is_rusinov@5 15 self.after_id = 0
is_rusinov@54 16 self.enter1_bound = False
is_rusinov@54 17 self.enter3_bound = False
is_rusinov@51 18 self.mouse_offset_x = 0
is_rusinov@51 19 self.mouse_offset_y = 0
is_rusinov@18 20 self.mouse_zoom = 0
is_rusinov@54 21 self.zoom_divisor = 1
is_rusinov@7 22 self.is_started = False
is_rusinov@54 23 self.char = None
is_rusinov@18 24 self.keys = dict()
is_rusinov@29 25 self.draw()
is_rusinov@5 26 def start(self):
is_rusinov@8 27 if not self.is_started:
is_rusinov@7 28 self.is_started = True
is_rusinov@43 29 self.repeat()
is_rusinov@43 30 def repeat(self):
is_rusinov@43 31 self.next_step()
is_rusinov@43 32 self.after_id = canvas.after(self.delay, self.repeat)
is_rusinov@5 33
is_rusinov@5 34 def stop(self):
is_rusinov@29 35 canvas.after_cancel(self.after_id)
is_rusinov@7 36 self.is_started = False
is_rusinov@5 37
is_rusinov@5 38 def next_step(self):
is_rusinov@53 39 self.draw_cell(automata.next_step())
is_rusinov@5 40
is_rusinov@18 41 def save_file(self):
Ilia@2 42 pass
is_rusinov@5 43
is_rusinov@18 44 def open_file(self):
Ilia@2 45 pass
is_rusinov@5 46
is_rusinov@29 47 def show_help_window(self):
Ilia@2 48 pass
is_rusinov@5 49
is_rusinov@29 50 def hide_help_window(self):
is_rusinov@8 51 pass
is_rusinov@8 52
is_rusinov@8 53 def zoom_in(self, zoom_rate=1):
is_rusinov@7 54 if self.cell_size < 50:
is_rusinov@8 55 self.cell_size = self.cell_size + zoom_rate
is_rusinov@7 56 self.draw()
is_rusinov@5 57
is_rusinov@8 58 def zoom_out(self, zoom_rate=1):
is_rusinov@7 59 if self.cell_size > 1:
is_rusinov@8 60 self.cell_size = self.cell_size - zoom_rate
is_rusinov@7 61 self.draw()
is_rusinov@5 62
is_rusinov@8 63 def slower(self, speed_rate=1):
is_rusinov@7 64 self.delay = self.delay + speed_rate
is_rusinov@5 65
is_rusinov@8 66 def faster(self, speed_rate=1):
is_rusinov@29 67 if self.delay > speed_rate:
is_rusinov@7 68 self.delay = self.delay - speed_rate
is_rusinov@7 69 else:
is_rusinov@7 70 self.delay = 0
is_rusinov@5 71
is_rusinov@18 72 def change_size(self, dx, dy, position=0):
is_rusinov@8 73 if position < 9:
is_rusinov@8 74 if position == 0 or position == 3 or position == 6:
is_rusinov@8 75 automata.change_size(dx, 3)
is_rusinov@8 76 elif position == 1 or position == 4 or position == 7:
is_rusinov@8 77 automata.change_size(dx / 2, 3)
is_rusinov@8 78 automata.change_size(dx - dx / 2, 1)
is_rusinov@18 79 else:
is_rusinov@8 80 automata.change_size(dx, 1)
is_rusinov@8 81 if position == 0 or position == 1 or position == 2:
is_rusinov@8 82 automata.change_size(dy, 0)
is_rusinov@8 83 elif position == 3 or position == 4 or position == 5:
is_rusinov@8 84 automata.change_size(dy / 2, 0)
is_rusinov@8 85 automata.change_size(dy - dy / 2, 2)
is_rusinov@18 86 else:
is_rusinov@8 87 automata.change_size(dy, 2)
is_rusinov@8 88 self.draw()
is_rusinov@5 89
darkhan@50 90 def draw_cell(self, cells):
darkhan@50 91 for row, col in cells:
darkhan@42 92 index = automata.symbols[automata.field[row][col]]
darkhan@42 93 color = automata.states[index].color
darkhan@42 94 canvas.itemconfig(self.cells[row][col], fill=color)
darkhan@42 95
darkhan@32 96 def draw(self):
darkhan@31 97 canvas.delete("all")
darkhan@42 98 self.cells = []
darkhan@31 99
darkhan@31 100 shift = self.cell_size + self.line_width
darkhan@42 101
darkhan@42 102 left = -self.offset_x + self.line_width
darkhan@42 103 top = -self.offset_y + self.line_width
darkhan@31 104 for row in range(automata.height):
darkhan@42 105 self.cells.append([])
darkhan@31 106 for col in range(automata.width):
darkhan@31 107 index = automata.symbols[automata.field[row][col]]
darkhan@31 108 color = automata.states[index].color
darkhan@42 109 cell = canvas.create_rectangle(left + col * shift,
darkhan@31 110 top + row * shift,
darkhan@31 111 left + col * shift + self.cell_size,
darkhan@31 112 top + row * shift + self.cell_size,
darkhan@50 113 fill=color, outline="", tag="cell")
darkhan@42 114 self.cells[row].append(cell)
is_rusinov@5 115
is_rusinov@7 116 def press1(self, event):# drawer
is_rusinov@54 117 if self.enter1_bound:
is_rusinov@54 118 canvas.tag_unbind("cell", "<Enter>")
is_rusinov@54 119 self.enter1_bound = False
is_rusinov@54 120 else:
is_rusinov@54 121 column = (event.x - self.offset_x * (self.cell_size + self.line_width)) / (self.cell_size + self.line_width)
is_rusinov@54 122 row = (event.y - self.offset_y * (self.cell_size + self.line_width)) / (self.cell_size + self.line_width)
is_rusinov@54 123 index = (automata.symbols[automata.field[row][column]] + 1) % len(automata.states)
is_rusinov@54 124 if self.char != None and self.keys.has_key(self.char):
is_rusinov@54 125 index = self.keys[self.char]
is_rusinov@54 126 automata.field[row][column] = automata.states[index].symbol
is_rusinov@54 127 self.draw_cell([(row, column)])
is_rusinov@54 128
is_rusinov@54 129 def d_press1(self, event):# drawer
is_rusinov@54 130 canvas.tag_bind("cell", "<Enter>", self.enter1)
is_rusinov@54 131 self.enter1_bound = True
is_rusinov@54 132
is_rusinov@54 133 def enter1(self, event):
is_rusinov@26 134 column = (event.x - self.offset_x * (self.cell_size + self.line_width)) / (self.cell_size + self.line_width)
is_rusinov@26 135 row = (event.y - self.offset_y * (self.cell_size + self.line_width)) / (self.cell_size + self.line_width)
is_rusinov@18 136 index = (automata.symbols[automata.field[row][column]] + 1) % len(automata.states)
is_rusinov@54 137 if self.char != None and self.keys.has_key(self.char):
is_rusinov@54 138 index = self.keys[self.char]
is_rusinov@18 139 automata.field[row][column] = automata.states[index].symbol
is_rusinov@53 140 self.draw_cell([(row, column)])
is_rusinov@5 141
is_rusinov@7 142 def press3(self, event):# drawer
is_rusinov@54 143 if self.enter3_bound:
is_rusinov@54 144 canvas.tag_unbind("cell", "<Enter>")
is_rusinov@54 145 self.enter3_bound = False
is_rusinov@54 146 else:
is_rusinov@54 147 column = (event.x - self.offset_x * (self.cell_size + self.line_width)) / (self.cell_size + self.line_width)
is_rusinov@54 148 row = (event.y - self.offset_y * (self.cell_size + self.line_width)) / (self.cell_size + self.line_width)
is_rusinov@54 149 index = (automata.symbols[automata.field[row][column]] + len(automata.states) - 1) % len(automata.states)
is_rusinov@54 150 automata.field[row][column] = automata.states[index].symbol
is_rusinov@54 151 self.draw_cell([(row, column)])
is_rusinov@54 152
is_rusinov@54 153 def d_press3(self, event):# drawer
is_rusinov@54 154 canvas.tag_bind("cell", "<Enter>", self.enter3)
is_rusinov@54 155 self.enter3_bound = True
is_rusinov@54 156
is_rusinov@54 157 def enter3(self, event):
is_rusinov@26 158 column = (event.x - self.offset_x * (self.cell_size + self.line_width)) / (self.cell_size + self.line_width)
is_rusinov@26 159 row = (event.y - self.offset_y * (self.cell_size + self.line_width)) / (self.cell_size + self.line_width)
is_rusinov@54 160 index = (automata.symbols[automata.field[row][column]] - 1) % len(automata.states)
is_rusinov@18 161 automata.field[row][column] = automata.states[index].symbol
is_rusinov@53 162 self.draw_cell([(row, column)])
is_rusinov@5 163
is_rusinov@54 164 def press_key(self, event):# drawer
is_rusinov@54 165 self.char = event.char
is_rusinov@5 166
is_rusinov@54 167 def release_key(self, event):# drawer
is_rusinov@54 168 self.char = None
is_rusinov@18 169
is_rusinov@43 170 def press1_ctrl(self, event):# change_offset (B1+ctrl)
is_rusinov@54 171 canvas.focus_set()
is_rusinov@51 172 self.mouse_offset_x = event.x
is_rusinov@51 173 self.mouse_offset_y = event.y
is_rusinov@18 174
is_rusinov@43 175 def motion1_ctrl(self, event):# change_offset (B1+ctrl)
is_rusinov@51 176 self.offset_x = (event.x - self.mouse_offset_x) / (self.cell_size + self.line_width)
is_rusinov@51 177 self.offset_y = (event.y - self.mouse_offset_y) / (self.cell_size + self.line_width)
is_rusinov@51 178 self.mouse_offset_x = event.x
is_rusinov@51 179 self.mouse_offset_y = event.y
is_rusinov@18 180 self.draw()
is_rusinov@5 181
is_rusinov@43 182 def press13(self, event):# zoom
is_rusinov@54 183 canvas.focus_set()
is_rusinov@18 184 self.mouse_zoom = event.y
is_rusinov@5 185
is_rusinov@43 186 def motion13(self, event):# zoom
is_rusinov@18 187 delta = (event.y - self.mouse_zoom) / self.zoom_divisor
is_rusinov@18 188 self.cell_size = self.cell_size + delta
is_rusinov@18 189 if self.cell_size > 50:
is_rusinov@18 190 self.cell_size = 50
is_rusinov@18 191 if self.cell_size < 1:
is_rusinov@18 192 self.cell_size = 1
is_rusinov@18 193 self.mouse_zoom = event.y
is_rusinov@18 194 self.draw()
is_rusinov@5 195
is_rusinov@8 196 def to_top(self):# replace choosen state to top
is_rusinov@58 197 selected = state_list.curselection()
is_rusinov@58 198 if len(selected):
is_rusinov@58 199 index = int(selected[0])
is_rusinov@58 200 state = automata.states[index]
is_rusinov@58 201 print state
is_rusinov@58 202 del automata.states[index]
is_rusinov@58 203 automata.states.insert(0, state)
is_rusinov@58 204 self.refresh_list()
is_rusinov@58 205 state_list.selection_set(0)
is_rusinov@58 206 print automata.states
is_rusinov@7 207
is_rusinov@8 208 def to_bottom(self):# replace choosen state to botton
is_rusinov@58 209 selected = state_list.curselection()
is_rusinov@58 210 if len(selected):
is_rusinov@58 211 index = int(selected[0])
is_rusinov@58 212 state = automata.states[index]
is_rusinov@58 213 print state
is_rusinov@58 214 del automata.states[index]
is_rusinov@58 215 automata.states.append(state)
is_rusinov@58 216 self.refresh_list()
is_rusinov@58 217 state_list.selection_set("end")
is_rusinov@58 218 print automata.states
is_rusinov@7 219
is_rusinov@8 220 def upwards(self):
is_rusinov@58 221 selected = state_list.curselection()
is_rusinov@58 222 if len(selected):
is_rusinov@58 223 index = int(selected[0])
is_rusinov@58 224 if index > 0:
is_rusinov@58 225 state = automata.states[index]
is_rusinov@58 226 print state
is_rusinov@58 227 del automata.states[index]
is_rusinov@58 228 automata.states.insert(index - 1, state)
is_rusinov@58 229 self.refresh_list()
is_rusinov@58 230 state_list.selection_set(index - 1)
is_rusinov@58 231 print automata.states
is_rusinov@7 232
is_rusinov@8 233 def downwards(self):
is_rusinov@58 234 selected = state_list.curselection()
is_rusinov@58 235 if len(selected):
is_rusinov@58 236 index = int(selected[0])
is_rusinov@58 237 if index < state_list.size() - 1:
is_rusinov@58 238 state = automata.states[index]
is_rusinov@58 239 print state
is_rusinov@58 240 del automata.states[index]
is_rusinov@58 241 automata.states.insert(index + 1, state)
is_rusinov@58 242 self.refresh_list()
is_rusinov@58 243 state_list.selection_set(index + 1)
is_rusinov@58 244 print automata.states
is_rusinov@7 245
is_rusinov@8 246 def delete_state(self):# delete choosen state
is_rusinov@58 247 selected = state_list.curselection()
is_rusinov@58 248 if len(selected):
is_rusinov@58 249 index = int(selected[0])
is_rusinov@58 250 print automata.states[index]
is_rusinov@58 251 del automata.symbols[automata.states[index].symbol]
is_rusinov@58 252 for key in self.keys.keys():
is_rusinov@58 253 if self.keys[key] == index:
is_rusinov@58 254 del self.keys[key]
is_rusinov@58 255 del automata.states[index]
is_rusinov@58 256 self.refresh_list()
is_rusinov@58 257 print automata.states
is_rusinov@7 258
is_rusinov@18 259 def add(self):# add new state
is_rusinov@29 260 name = state_name.get()
is_rusinov@48 261 symbol = state_symbol.get()
is_rusinov@54 262 key = state_key.get().lower()
is_rusinov@29 263 color = state_color.get()
is_rusinov@29 264 nums = []
is_rusinov@29 265 for i, value in enumerate(ckeckbox_nums):
is_rusinov@29 266 if value:
is_rusinov@29 267 nums.append(i)
is_rusinov@54 268 if self.keys.has_key(key):
is_rusinov@29 269 error.config(text="State with such key has already existed")
is_rusinov@29 270 state_key.focus()
is_rusinov@29 271 elif len(key) != 1:
is_rusinov@29 272 error.config(text="Bad key for state")
is_rusinov@29 273 state_key.focus()
is_rusinov@29 274 elif automata.symbols.has_key(symbol):
is_rusinov@29 275 error.config(text="State with such symbol has already existed")
is_rusinov@29 276 state_symbol.focus()
is_rusinov@29 277 elif len(symbol) != 1:
is_rusinov@29 278 error.config(text="Bad symbol for state")
is_rusinov@29 279 state_symbol.focus()
is_rusinov@29 280 else:
is_rusinov@29 281 state = State(name, symbol, color, nums)
is_rusinov@29 282 automata.states.append(state)
is_rusinov@34 283 automata.symbols[symbol] = len(automata.states) - 1
is_rusinov@34 284 self.keys[key] = len(automata.states) - 1
is_rusinov@58 285 error.config(text="")
is_rusinov@58 286 self.refresh_list()
is_rusinov@5 287
is_rusinov@18 288 def change(self):# change chosen state
is_rusinov@58 289 selected = state_list.curselection()
is_rusinov@58 290 if len(selected):
is_rusinov@58 291 index = int(selected[0])
is_rusinov@58 292 name = state_name.get()
is_rusinov@58 293 symbol = state_symbol.get()
is_rusinov@58 294 key = state_key.get().lower()
is_rusinov@58 295 color = state_color.get()
is_rusinov@58 296 nums = []
is_rusinov@58 297 for i, value in enumerate(ckeckbox_nums):
is_rusinov@58 298 print i, value.get()
is_rusinov@58 299 if value.get() == 1:
is_rusinov@58 300 nums.append(i)
is_rusinov@58 301 print nums
is_rusinov@58 302 if self.keys.has_key(key) and self.keys[key] != index:
is_rusinov@58 303 error.config(text="State with such key has already existed")
is_rusinov@58 304 state_key.focus()
is_rusinov@58 305 elif len(key) != 1:
is_rusinov@58 306 error.config(text="Bad key for state")
is_rusinov@58 307 state_key.focus()
is_rusinov@58 308 elif automata.symbols.has_key(symbol) and automata.symbols[symbol] != index:
is_rusinov@58 309 error.config(text="State with such symbol has already existed")
is_rusinov@58 310 state_symbol.focus()
is_rusinov@58 311 elif len(symbol) != 1:
is_rusinov@58 312 error.config(text="Bad symbol for state")
is_rusinov@58 313 state_symbol.focus()
is_rusinov@58 314 else:
is_rusinov@58 315 state = State(name, symbol, color, nums)
is_rusinov@58 316 automata.states[index] = state
is_rusinov@58 317 automata.symbols[symbol] = index
is_rusinov@58 318 self.keys[key] = index
is_rusinov@58 319 error.config(text="")
is_rusinov@58 320 self.refresh_list()
is_rusinov@54 321
is_rusinov@18 322 def show_size_window(self):
is_rusinov@18 323 size_window.deiconify()
Ilia@55 324
is_rusinov@18 325 def hide_size_window(self):
is_rusinov@18 326 size_window.withdraw()
Ilia@55 327
Ilia@55 328 def show_automata_window(self):
Ilia@55 329 automata_window.deiconify()
Ilia@55 330
Ilia@55 331 def hide_automata_window(self):
Ilia@55 332 automata_window.withdraw()
is_rusinov@58 333 def refresh_list(self):
is_rusinov@58 334 state_list.delete(0, "end")
is_rusinov@58 335 for state in automata.states:
is_rusinov@58 336 state_list.insert("end", state)
is_rusinov@58 337 def list_mouse_release(self, event):
is_rusinov@58 338 print 'hello'
is_rusinov@58 339 selected = state_list.curselection()
is_rusinov@58 340 if len(selected):
is_rusinov@58 341 index = int(selected[0])
is_rusinov@58 342 state = automata.states[index]
is_rusinov@58 343 state_name.delete(0, "end")
is_rusinov@58 344 state_name.insert(0, state.name)
is_rusinov@58 345 state_symbol.delete(0, "end")
is_rusinov@58 346 state_symbol.insert(0, state.symbol)
is_rusinov@58 347 for key in self.keys.keys():
is_rusinov@58 348 if self.keys[key] == index:
is_rusinov@58 349 state_key.delete(0, "end")
is_rusinov@58 350 state_key.insert(0, key)
is_rusinov@58 351 state_color.delete(0, "end")
is_rusinov@58 352 state_color.insert(0, state.color)
is_rusinov@58 353 for i in range(9):
is_rusinov@58 354 ckeckbox_nums[i].set(i in state.nums)
Ilia@55 355
Ilia@6 356
Ilia@6 357
Ilia@6 358 root = Tk()
Ilia@36 359 root.title("Cyclic Cellular Automata")
Ilia@6 360
darkhan@42 361 canvas = Canvas(root, background="grey")
Ilia@6 362 canvas.config(width=500, height=400)
Ilia@6 363
is_rusinov@54 364 automata = Automata()
Ilia@36 365 handlers = Handlers()
Ilia@36 366
is_rusinov@54 367 canvas.tag_bind("cell", "<1>", handlers.press1)
is_rusinov@54 368 canvas.tag_bind("cell", "<Double-Button-1>", handlers.d_press1)
is_rusinov@54 369 canvas.tag_bind("cell", "<3>", handlers.press3)
is_rusinov@54 370 canvas.tag_bind("cell", "<Double-Button-3>", handlers.d_press3)
is_rusinov@54 371 canvas.bind_all("<KeyPress>", handlers.press_key)
is_rusinov@54 372 canvas.bind_all("<KeyRelease>", handlers.release_key)
is_rusinov@54 373 #canvas.bind("<Control-ButtonPress-1>", handlers.press1_ctrl)
is_rusinov@54 374 #canvas.bind("<Control-B1-Motion>", handlers.motion1_ctrl)
is_rusinov@54 375 #canvas.bind("<Shift-ButtonPress-1>", handlers.press13)
is_rusinov@54 376 #canvas.bind("<Shift-ButtonPress-1>", handlers.motion13)
Ilia@36 377
Ilia@36 378 canvas.pack(fill="both", expand="yes")
Ilia@6 379
Ilia@6 380 #infoPanel=Frame
Ilia@55 381 automata_window = Toplevel(root)
Ilia@55 382 automata_window.title("Automata")
Ilia@55 383 automata_window.withdraw()
Ilia@55 384 automata_window.resizable(False, False)
Ilia@55 385 automata_window.protocol("WM_DELETE_WINDOW", handlers.hide_automata_window)
Ilia@9 386
Ilia@55 387 headline = Label(automata_window, text= "Automata Panel", font=16)
Ilia@55 388 headline.pack(side="top",fill="both", expand="no")
Ilia@9 389
Ilia@55 390 Label(automata_window, text= "State Box:").pack(side="top", fill="x")
Ilia@56 391
Ilia@56 392 list_frame=Frame(automata_window)
Ilia@56 393 scrollbar = Scrollbar(list_frame)
Ilia@57 394 scrollbar.pack(side="right", fill="y")
is_rusinov@58 395 state_list=Listbox(list_frame, yscrollcommand=scrollbar.set, activestyle="none", selectmode="single")
is_rusinov@58 396 handlers.refresh_list()
is_rusinov@58 397 state_list.bind("<ButtonRelease-1>", handlers.list_mouse_release)
is_rusinov@7 398 state_list.pack(side="top", fill="y")
Ilia@56 399 scrollbar.config(command=state_list.yview)
Ilia@56 400 list_frame.pack(side="top")
Ilia@56 401
Ilia@55 402 up = Button(automata_window, text="Up", command=handlers.upwards)
Ilia@6 403 up.config(bg="red")
Ilia@55 404 down = Button(automata_window, text="Down", command=handlers.downwards)
Ilia@6 405 down.config(bg="orange")
Ilia@55 406 to_top = Button(automata_window, text="To Top", command=handlers.to_top)
Ilia@6 407 to_top.config(bg="yellow")
Ilia@55 408 to_bottom = Button(automata_window, text="To Bottom", command=handlers.to_bottom)
Ilia@6 409 to_bottom.config(bg="green")
Ilia@55 410 delete = Button(automata_window, text="Delete", command=handlers.delete_state)
Ilia@9 411 delete.config(bg="cyan")
Ilia@6 412 up.pack(side="top", fill="x")
Ilia@6 413 down.pack(side="top", fill="x")
Ilia@6 414 to_top.pack(side="top", fill="x")
Ilia@6 415 to_bottom.pack(side="top", fill="x")
Ilia@9 416 delete.pack(side="top", fill="x")
Ilia@6 417
Ilia@6 418
Ilia@55 419 information = Label(automata_window, text= "Information of State")
Ilia@9 420 information.pack(side="top", fill="x")
Ilia@55 421 info_frame=Frame(automata_window)
Ilia@9 422 Label(info_frame, text="Name").grid(row=0, column=0)
Ilia@9 423 state_name = Entry(info_frame)
Ilia@9 424 state_name.grid(row=0, column=1)
Ilia@9 425 Label(info_frame, text="Symbol").grid(row=1, column=0)
Ilia@9 426 state_symbol = Entry(info_frame)
Ilia@9 427 state_symbol.grid(row=1, column=1)
Ilia@9 428 Label(info_frame, text="Color").grid(row=2, column=0)
Ilia@9 429 state_color = Entry(info_frame)
Ilia@9 430 state_color.grid(row=2, column=1)
Ilia@9 431 Label(info_frame, text="Key").grid(row=3, column=0)
Ilia@9 432 state_key = Entry(info_frame)
Ilia@9 433 state_key.grid(row=3, column=1)
Ilia@9 434 info_frame.pack(side="top")
Ilia@9 435
Ilia@9 436
Ilia@36 437 ckeckbox_nums = [IntVar(), IntVar(), IntVar(), IntVar(), IntVar(),
Ilia@36 438 IntVar(), IntVar(), IntVar(), IntVar()]
Ilia@33 439
Ilia@55 440 condition = Label(automata_window, text= "Condition of conversion")
Ilia@9 441 condition.pack(side="top", fill="x")
Ilia@55 442 condition_frame=Frame(automata_window)
Ilia@9 443 Label(condition_frame, text="0: ").grid(row=0, column=0)
Ilia@39 444 c_button_0 = Checkbutton(condition_frame, variable=ckeckbox_nums[0])
Ilia@36 445 c_button_0.grid(row=0, column=1)
Ilia@9 446 Label(condition_frame, text="1: ").grid(row=0, column=2)
Ilia@39 447 c_button_1 = Checkbutton(condition_frame, variable=ckeckbox_nums[1])
Ilia@36 448 c_button_1.grid(row=0, column=3)
Ilia@9 449 Label(condition_frame, text="2: ").grid(row=0, column=4)
Ilia@39 450 c_button_2 = Checkbutton(condition_frame, variable=ckeckbox_nums[2])
Ilia@36 451 c_button_2.grid(row=0, column=5)
Ilia@9 452 Label(condition_frame, text="3: ").grid(row=1, column=0)
Ilia@39 453 c_button_3 = Checkbutton(condition_frame, variable=ckeckbox_nums[3])
Ilia@36 454 c_button_3.grid(row=1, column=1)
Ilia@9 455 Label(condition_frame, text="4: ").grid(row=1, column=2)
Ilia@39 456 c_button_4 = Checkbutton(condition_frame, variable=ckeckbox_nums[4])
Ilia@36 457 c_button_4.grid(row=1, column=3)
Ilia@9 458 Label(condition_frame, text="5: ").grid(row=1, column=4)
Ilia@39 459 c_button_5 = Checkbutton(condition_frame, variable=ckeckbox_nums[5])
Ilia@36 460 c_button_5.grid(row=1, column=5)
Ilia@9 461 Label(condition_frame, text="6: ").grid(row=2, column=0)
Ilia@39 462 c_button_6 = Checkbutton(condition_frame, variable=ckeckbox_nums[6])
Ilia@36 463 c_button_6.grid(row=2, column=1)
Ilia@9 464 Label(condition_frame, text="7: ").grid(row=2, column=2)
Ilia@39 465 c_button_7 = Checkbutton(condition_frame, variable=ckeckbox_nums[7])
Ilia@36 466 c_button_7.grid(row=2, column=3)
Ilia@9 467 Label(condition_frame, text="8: ").grid(row=2, column=4)
Ilia@39 468 c_button_8 = Checkbutton(condition_frame, variable=ckeckbox_nums[8])
Ilia@36 469 c_button_8.grid(row=2, column=5)
Ilia@9 470 condition_frame.pack(side="top")
Ilia@9 471
Ilia@9 472
Ilia@55 473 add_state = Button(automata_window, text="Add", command=handlers.add)
Ilia@9 474 add_state.config(bg="blue")
Ilia@55 475 change_state = Button(automata_window, text="Change", command=handlers.change)
Ilia@9 476 change_state.config(bg="violet")
Ilia@9 477 add_state.pack(side="top", fill="x")
Ilia@9 478 change_state.pack(side="top", fill="x")
Ilia@9 479
Ilia@55 480 error=Label(automata_window)
Ilia@9 481 error.pack(side="top", fill="x")
is_rusinov@8 482
is_rusinov@8 483
Ilia@12 484 side = 0
Ilia@12 485
Ilia@12 486 size_window = Toplevel(root)
Ilia@12 487 size_window.title("")
Ilia@13 488 size_window.withdraw()
Ilia@55 489 size_window.resizable(False, False)
Ilia@12 490 size_window.protocol("WM_DELETE_WINDOW", handlers.hide_size_window)
Ilia@12 491 Label(size_window, text= "Current size of window:").pack(side="top", fill="x")
Ilia@19 492 size = Label(size_window, text= str(len(automata.field)) + " x " + str(len(automata.field[0])))
Ilia@19 493 size.pack(side="top", fill="x")
Ilia@12 494 Label(size_window, text= "New size:").pack(side="top", fill="x")
Ilia@12 495 new_size = Frame(size_window)
Ilia@12 496 size_x = Entry(new_size, width=5)
Ilia@12 497 size_x.grid(row=0, column=0)
Ilia@12 498 Label(new_size, text=" x ").grid(row=0, column=1)
Ilia@12 499 size_y = Entry(new_size, width=5)
Ilia@12 500 size_y.grid(row=0, column=2)
Ilia@12 501 new_size.pack(side="top")
Ilia@12 502 Label(size_window, text= "Expansion of window:").pack(side="top", fill="x")
Ilia@12 503 expansion = Frame(size_window)
Ilia@12 504 r0 = Radiobutton(expansion, variable=side, value = 0, indicatoron=0, width=2, height=1)
Ilia@12 505 r0.select()
Ilia@12 506 r0.grid(row=0, column=0)
Ilia@12 507 r1 = Radiobutton(expansion, variable=side, value = 1, indicatoron=0, width=2, height=1)
Ilia@12 508 r1.grid(row=0, column=1)
Ilia@12 509 r2 = Radiobutton(expansion, variable=side, value = 2, indicatoron=0, width=2, height=1)
Ilia@12 510 r2.grid(row=0, column=2)
Ilia@12 511 r3 = Radiobutton(expansion, variable=side, value = 3, indicatoron=0, width=2, height=1)
Ilia@12 512 r3.grid(row=1, column=0)
Ilia@12 513 r4 = Radiobutton(expansion, variable=side, value = 4, indicatoron=0, width=2, height=1)
Ilia@12 514 r4.grid(row=1, column=1)
Ilia@12 515 r5 = Radiobutton(expansion, variable=side, value = 5, indicatoron=0, width=2, height=1)
Ilia@12 516 r5.grid(row=1, column=2)
Ilia@12 517 r6 = Radiobutton(expansion, variable=side, value = 6, indicatoron=0, width=2, height=1)
Ilia@12 518 r6.grid(row=2, column=0)
Ilia@12 519 r7 = Radiobutton(expansion, variable=side, value = 7, indicatoron=0, width=2, height=1)
Ilia@12 520 r7.grid(row=2, column=1)
Ilia@12 521 r8 = Radiobutton(expansion, variable=side, value = 8, indicatoron=0, width=2, height=1)
Ilia@12 522 r8.grid(row=2, column=2)
Ilia@12 523 expansion.pack(side="top")
Ilia@12 524 Label(size_window).pack(side="top", fill="x")
Ilia@12 525 apply_frame = Frame(size_window, padx=10, pady=5)
Ilia@12 526 apply_size = Button(apply_frame, text="Apply")
Ilia@12 527 apply_size.config(bg="yellow")
Ilia@12 528 apply_size.pack(side="left", fill="x")
Ilia@12 529 close_size = Button(apply_frame, text="Close", command=handlers.hide_size_window)
Ilia@12 530 close_size.config(bg="green")
Ilia@12 531 close_size.pack(side="right", fill="x")
Ilia@12 532 apply_frame.pack(side="top", fill="x")
Ilia@12 533
Ilia@6 534 menubar = Menu(root)
Ilia@6 535 root.config(menu=menubar)
Ilia@6 536
Ilia@6 537 menu_file = Menu(menubar)
Ilia@6 538 menu_file.add_command(label="New")
Ilia@9 539 menu_file.add_command(label="Open...", command=handlers.open_file)
Ilia@9 540 menu_file.add_command(label="Save...", command=handlers.save_file)
Ilia@6 541 menu_file.add_separator()
Ilia@9 542 menu_file.add_command(label="Exit", command=root.destroy)
Ilia@6 543 menubar.add_cascade(label="File", menu=menu_file)
Ilia@6 544
Ilia@6 545 menu_action = Menu(menubar)
Ilia@9 546 menu_action.add_command(label="Start", command=handlers.start)
Ilia@9 547 menu_action.add_command(label="Stop", command=handlers.stop)
Ilia@9 548 menu_action.add_command(label="Next Step", command=handlers.next_step)
Ilia@12 549 menu_action.add_separator()
Ilia@9 550 menu_action.add_command(label="Increase speed", command=handlers.faster)
Ilia@9 551 menu_action.add_command(label="Decrease speed", command=handlers.slower)
Ilia@12 552 menu_action.add_separator()
Ilia@9 553 menu_action.add_command(label="Zoom In", command=handlers.zoom_in)
Ilia@9 554 menu_action.add_command(label="Zoom Out", command=handlers.zoom_out)
Ilia@12 555 menu_action.add_separator()
Ilia@6 556 menu_action.add_command(label="Clean field")
Ilia@6 557 menu_action.add_command(label="Fill randomly")
Ilia@13 558 menu_action.add_separator()
Ilia@12 559 menu_action.add_command(label="Change size",command=handlers.show_size_window)
Ilia@6 560 menubar.add_cascade(label="Action", menu=menu_action)
Ilia@6 561
Ilia@55 562 menubar.add_command(label="Automata", command=handlers.show_automata_window)
Ilia@6 563
is_rusinov@43 564 menubar.add_command(label="Help", command=handlers.show_help_window)
Ilia@6 565
Ilia@6 566 root.mainloop()
Ilia@6 567