Esempio n. 1
0
    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())
Esempio n. 2
0
    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)