I'm trying to create a pathfinding representation (using Dijkstra). the way my graphics work is as followed:
    def run_visuals(self):
    """
    runs the visuals in a loop
    """
    run = True
    self.draw_grid()
    while run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
            elif event.type == pygame.MOUSEBUTTONDOWN:  # mouse click
                x, y = event.pos
                row = x // BLOCK_SIZE
                col = y // BLOCK_SIZE
                if event.button == RIGHT_MOUSE_CLICK:  # right click - source and dest
                    if not self.is_src_button_init:
                        init_src_node()
                    elif not self.is_dest_button_init:
                        init_dest_node()
                elif event.button == LEFT_MOUSE_CLICK:  # left click - bad nodes
                    self.add_bad_nodes_with_mouse(x, y)
                    self.draw_nodes("bad")
                    self.graph.remove_edges_of_bad_nodes(self.bad_nodes)
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:  # pressed enter - run algorithm
                    dijkstra(self.graph, self.source_node, self.window, self.dest_node)
        pygame.display.update()
        self.clock.tick(FPS)
notice when ENTER key is clicked, this is where I call the algorithm:
source.set_dist_from_source(0)
Q = build_min_heap(graph)  # O(V)
while Q:  # O(V)
    u = heapq.heappop(Q)  # pops the min val based on dist from source (get value and remove from heap) O(logV)
    if u == dest:
        break
    neighbors_of_u = graph.get_neighbors()[u.name]
    for v in neighbors_of_u:  # O(E)
        # drawing neighbors:
        if not v.is_colored:
            block = get_block_from_node(v)
            block.draw(window, VISITED_COLOR)
        # checking min path:
        weight_u_v = graph.get_edge_weight(u.name, v.name)
        v_dist = v.dist_from_source
        u_dist = u.dist_from_source
        if v_dist > u_dist + weight_u_v:
            v.set_dist_from_source(u_dist + weight_u_v)
            v.set_prev(u) # updating prev is done to reconstruct the path itself
            heapq.heappush(Q, v)  # O(logV)
print_path(window, source, dest)
notice the lines
block = get_block_from_node(v)
block.draw(window, VISITED_COLOR)
this is the part I wish to display, but with a delay.
this code currently works, but the blocks are colored so fast that the user can't see the process of the painting.
I've tried adding a clock.tick(10) under the line block.draw(window, VISITED_COLOR), where clock=pygame.time.Clock(), but this seems to make everything just stop (crashed the window)
this obviously isn't the entire code, but I believe that it is all the relevant code, would appreciate any help!