コード例 #1
0
class MainApplication(tk.Frame):

    min_speed, max_speed = 1, 20
    base_speed = 1000

    default_distribution = distrib

    def __init__(self, master):
        super().__init__(master)

        self.speed = 1
        self.is_paused = True

        self.machines = [ShortestProcessingTime(), Prediction(), RoundRobin()]

        self.name_to_machine = {
            "{} {}".format(m.name, m.id): m
            for m in self.machines
        }
        self.name_to_machine["All machines"] = self.machines

        self.canvas = Canvas(self, self, machines=self.machines)

        self.make_timeline()
        self.make_taskmanager()
        self.show_tools = ShowTools(tk.Toplevel(self), self)
        self.graphs = []

        self.canvas.grid(row=1, column=1)
        self.show_tools.grid(row=1, column=1)

        self.pack()

    def make_graph(self):
        self.graphs.append(ShowGraph(tk.Toplevel(self), self))
        self.graphs[-1].grid(row=1, column=1)
        self.graphs[-1].master.focus_set()

    def make_timeline(self):
        self.timeline = Timeline(tk.Toplevel(self), self)
        self.timeline.grid(row=1, column=1)
        self.timeline.master.focus_set()

    def make_taskmanager(self):
        self.task_manager = TaskManager(tk.Toplevel(self), self,
                                        MainApplication.default_distribution)
        self.task_manager.grid(row=2, column=1)
        self.task_manager.master.focus_set()

    def change_speed(self, new_speed):
        if new_speed < MainApplication.min_speed:
            new_speed = MainApplication.min_speed
        elif new_speed > MainApplication.max_speed:
            new_speed = MainApplication.max_speed

        self.speed = round(new_speed)

    def run(self):
        self.canvas.run(None)
        for g in self.graphs:
            g.update_graph()

    def _check_run(self):
        """
        If application is not paused, runs a step
        """
        if self.is_paused is False:
            self.run()
            self.after(int(MainApplication.base_speed / self.speed),
                       self._check_run)

    def change_pause(self):
        self.is_paused = not (self.is_paused)
        self._check_run()

    def add_task(self, machine, task):
        machine.addTask(task)
        self.canvas.tasks.append(task)

    def remove_task(self, machine, task):
        self.canvas.tasks.remove(task)
        try:
            self.canvas.machine_to_display[machine].remove(task)
        except ValueError:
            pass
        machine.removeTask(task)