def load_timeline(self, timeline): """Load a timeline into the GUI and display on the graph Also enables playback and screenshot UI controls. Args: timeline (np.ndarray): The grid state for each timestep """ # Create graph from timeline self.ca_graph = _CAGraph(timeline, self.ca_config.states, sequence=True) if self.ca_canvas is not None: self.ca_canvas.get_tk_widget().destroy() self.ca_canvas = FigureCanvasTkAgg(self.ca_graph.fig, master=self.rcframe) self.rcframe.config(borderwidth=5, relief=tk.GROOVE) self.ca_canvas.get_tk_widget().pack(padx=0, pady=0) if self.ca_config.state_colors is not None: self.ca_graph.set_colormap(self.ca_config.state_colors) maxframe = len(self.ca_graph.timeline) - 1 self.update_controls(maxframe) # enable screenshotting self.screenshotui.set(graph=self.ca_graph, title=self.ca_config.title) self.screenshotui.enable() # enable playback and display the first frame on the graph self.root.after(0, self.playback_controls.update())
def __init__(self): """Initialise the main GUI This is the main GUI and can be run simply by invoking this method """ self.root = tk.Tk() # bring window to front self.root.lift() self.root.attributes('-topmost', True) self.root.after_idle(self.root.attributes, '-topmost', False) # set title self.root.wm_title(self.WINDOW_TITLE) # set icon set_icon(self.root) self.add_menubar() self.add_frames() self.ca_graph = None # play back control variables and UI self.playback_controls = _PlaybackControls(self) # add screenshot ui to top right self.screenshotui = _ScreenshotUI(self.rtopframe) self.init_config_ui() # Add placeholder canvas to be replaced by graph after run self.ca_graph = _CAGraph(None, None, placeholder=True) self.ca_canvas = FigureCanvasTkAgg(self.ca_graph.fig, master=self.rcframe) self.ca_canvas.get_tk_widget().pack() self.root.mainloop()
def add_graph(self, parent, mode): """Add a _CAGraph object to the window""" self.graph = _CAGraph(self.grid, self.ca_config.states) self.ca_canvas = FigureCanvasTkAgg(self.graph.fig, master=parent) if mode == 'custom': self.graph.fig.canvas.mpl_connect("button_press_event", self.onaxesclick) self.graph.fig.canvas.mpl_connect("motion_notify_event", self.onaxeshover) parent.config(bd=5, relief=tk.GROOVE) self.ca_canvas.get_tk_widget().pack(padx=10, pady=10) self.graph.set_colormap(self.ca_config.state_colors)