Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ îðèãèíàëüíîãî äîêóìåíòà : http://kodomo.cmm.msu.su/trac/cca/browser/Interface.py?rev=65%3A766236a9c924
Äàòà èçìåíåíèÿ: Unknown
Äàòà èíäåêñèðîâàíèÿ: Mon Apr 11 03:40:18 2016
Êîäèðîâêà: UTF-8
Interface.py ? Cyclyc Cell Automata

source: Interface.py @ 65:766236a9c924

Revision 65:766236a9c924, 20.8 KB checked in by is_rusinov, 5 years ago (diff)

some correction in delete_state, add fix #15, fix #9

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