Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/cca/diff/d415e749c701/Interface.py
Дата изменения: Unknown
Дата индексирования: Sun Feb 3 10:48:43 2013
Кодировка:
cca: Interface.py diff

cca

diff Interface.py @ 70:d415e749c701

+ save/open file and change_size (change_size is not working)
author is_rusinov
date Sun, 12 Dec 2010 01:21:24 +0300
parents ac96d7c2c7c4
children 1f4a844d7e46
line diff
     1.1 --- a/Interface.py	Sat Dec 11 22:32:04 2010 +0300
     1.2 +++ b/Interface.py	Sun Dec 12 01:21:24 2010 +0300
     1.3 @@ -1,6 +1,8 @@
     1.4  import math
     1.5  import random
     1.6 +import pickle
     1.7  import tkColorChooser
     1.8 +import tkFileDialog
     1.9  from Tkinter import *
    1.10  
    1.11  from State import *
    1.12 @@ -23,7 +25,9 @@
    1.13  		self.selected_state = None
    1.14  		self.is_started = False
    1.15  		self.char = None
    1.16 -		self.keys = dict()
    1.17 +		self.keys = {}
    1.18 +		for index, state in enumerate(automata.states):
    1.19 +			self.keys[state.key] = index
    1.20  		self.draw()
    1.21  	def start(self):
    1.22  		if not self.is_started:
    1.23 @@ -41,10 +45,23 @@
    1.24  		self.draw_cell(automata.next_step())
    1.25  	
    1.26  	def save_file(self):
    1.27 -		pass
    1.28 +		file = tkFileDialog.asksaveasfile(title="Save automata as", filetypes=[('Cyclic cell Automata File', '*.caf')])
    1.29 +		print file
    1.30 +		pickle.dump([automata.field, automata.states], file)
    1.31  	
    1.32  	def open_file(self):
    1.33 -		pass
    1.34 +		file = tkFileDialog.askopenfile(title="Open file", filetypes=[('Cyclic cell Automata File', '*.caf')])
    1.35 +		if file != None:
    1.36 +			from_file = pickle.load(file)
    1.37 +			automata.field = from_file[0]
    1.38 +			automata.height = len(automata.field)
    1.39 +			automata.width = len(automata.field[0])
    1.40 +			automata.states = from_file[1]
    1.41 +			self.selected_state = None
    1.42 +			self.refresh_dicts()
    1.43 +			self.refresh_list()
    1.44 +			self.hide_automata_window()
    1.45 +			self.draw()
    1.46  	
    1.47  	def show_help_window(self):
    1.48  		pass
    1.49 @@ -71,8 +88,11 @@
    1.50  		else:
    1.51  			self.delay = 0
    1.52  	
    1.53 -	def change_size(self, dx, dy, position=0):
    1.54 -		if position < 9:
    1.55 +	def change_size(self):
    1.56 +		try:
    1.57 +			dx = int(size_x.get()) - automata.width
    1.58 +			dy = int(size_y.get()) - automata.height
    1.59 +			position = side.get()
    1.60  			if position == 0 or position == 3 or position == 6:
    1.61  				automata.change_size(dx, 3)
    1.62  			elif position == 1 or position == 4 or position == 7:
    1.63 @@ -88,7 +108,10 @@
    1.64  			else:
    1.65  				automata.change_size(dy, 2)
    1.66  			self.draw()
    1.67 -	
    1.68 +			self.hide_size_window()
    1.69 +		except Exception:
    1.70 +			message.config(text="Operation is refused")
    1.71 +			message.after(2000, self.clear_message)
    1.72  	def draw_cell(self, cells):
    1.73  		for row, col in cells:
    1.74  			index = automata.symbols[automata.field[row][col]]
    1.75 @@ -98,9 +121,7 @@
    1.76  	def draw(self):
    1.77  		canvas.delete("all")
    1.78  		self.cells = []
    1.79 -		
    1.80  		shift = self.cell_size + self.line_width
    1.81 -				
    1.82  		left = -self.offset_x + self.line_width
    1.83  		top = -self.offset_y + self.line_width
    1.84  		for row in range(automata.height):
    1.85 @@ -371,6 +392,8 @@
    1.86  		size_window.withdraw()
    1.87  	
    1.88  	def show_automata_window(self):
    1.89 +		self.select_item(self.selected_state)
    1.90 +		self.refresh_list
    1.91  		automata_window.deiconify()
    1.92  	
    1.93  	def hide_automata_window(self):
    1.94 @@ -417,6 +440,9 @@
    1.95  	def clear_error(self):
    1.96  		error.config(text="")
    1.97  	
    1.98 +	def clear_message(self):
    1.99 +		message.config(text="")
   1.100 +	
   1.101  	def clean_field(self):
   1.102  		symbol = automata.states[0].symbol
   1.103  		cells = []
   1.104 @@ -574,7 +600,7 @@
   1.105  error.pack(side="top", fill="x")
   1.106  
   1.107  
   1.108 -side = 0
   1.109 +side = IntVar()
   1.110  
   1.111  size_window = Toplevel(root)
   1.112  size_window.title("")
   1.113 @@ -616,12 +642,13 @@
   1.114  expansion.pack(side="top")
   1.115  Label(size_window).pack(side="top", fill="x")
   1.116  apply_frame = Frame(size_window, padx=10, pady=5)
   1.117 -apply_size = Button(apply_frame, text="Apply", width=6)
   1.118 +apply_size = Button(apply_frame, text="Apply", width=6, command=handlers.change_size)
   1.119  apply_size.pack(side="left", fill="x")
   1.120  close_size = Button(apply_frame, text="Close", command=handlers.hide_size_window, width=6)
   1.121  close_size.pack(side="right", fill="x")
   1.122  apply_frame.pack(side="top", fill="x")
   1.123 -
   1.124 +message = Label(size_window, text="")
   1.125 +message.pack(side="top", fill="x")
   1.126  menubar = Menu(root)
   1.127  root.config(menu=menubar)
   1.128