コード例 #1
0
class Main(Tk):
    """The main class."""

    ALGORITHMS = {
        "Bubble": BubbleSort,
        "Bogo": BogoSort
    }

    def __init__(self):
        # Tk init
        Tk.__init__(self)
        self.title("Visualized Sorting Algorithms")
        self.geometry("{}x{}".format(WIDTH, HEIGHT))
        self.resizable(False, False)

        # Sorting control variables
        self.sorting = False
        data = random_list(0, 100, 200)
        self.sort = list(self.ALGORITHMS.values())[0](data) # First algorithm

        self.sort_delay = 1000/DEFAULT_SORT_SPEED # delay, in milliseconds
        self.tick_timer = current_milli_time()

        # Visualizer init
        self.visualizer = Visualizer(self, width=CANVAS_WIDTH, height=CANVAS_HEIGHT, bd=0, highlightthickness=0)

        # Control panel init
        self.control_panel = ControlPanel(self)

        # Main loop
        while True:
            self.tick()

    def tick(self):
        if self.sorting:
            if current_milli_time() - self.tick_timer > self.sort_delay: # Apply sorting delay
                # Sort
                self.sort.advance_sort()
                print(self.sort.__class__.__name__, "Iteration:", self.sort.iterations)
                self.tick_timer = current_milli_time()
            
        self.visualizer.draw_data(self.sort.data, self.sort.cursor, self.sort.sorted)
        
        
        # Tk mainloop()
        self.update_idletasks()
        self.update()

    def new_algo(self, algo, min_val, max_val, size):
        data = random_list(min_val, max_val, size)
        self.sort = self.ALGORITHMS[algo](data)
        self.visualizer.algo_name = algo
        self.pause()

    def pause(self):
        self.control_panel.b_pauseplay.config(text="Play")
        self.sorting = False
    
    def play(self):
        self.control_panel.b_pauseplay.config(text="Pause")
        self.sorting = True

    def pauseplay(self):
        if self.sorting:
            self.pause()
        else:
            self.play()