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