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

source: Interface.py @ 59:9a80d2c6acbf

Revision 59:9a80d2c6acbf, 19.9 KB checked in by Ilia, 5 years ago (diff)

change of button, fix#7

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