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