Skip to content Skip to sidebar Skip to footer

Call Function By Button Click In Pygame

I got a screen with buttons in Pygame here in the code below. Now I want to click the button, then a random() function starts and after 5 seconds it returns to the screen from the

Solution 1:

Add a state variable (runRandom), which indicates if the the function random has to be run:

runRandom = Falsewhilenot done:

    # [...]if runRandom:
        random()

Add user defined pygame.event, which can be used for a timer:

runRandomEvent = pygame.USEREVENT + 1
for event in pygame.event.get():

   # [...]elif event.type == runRandomEvent:
      # [...]

Allow the button to be pressed if random ins not running. If the button is pressed then state runRandom and start the timer (pygame.time.set_timer()) with the decided period of time (e.g. 5000 milliseconds = 5 seconds):

# [...]elif event.type == pygame.MOUSEBUTTONDOWN:
    if event.button == 1:
        if button.collidepoint(event.pos) andnot runRandom:
            # [...]

            runRandom = True
            pygame.time.set_timer(runRandomEvent, 5000)

When the time has elapse, the stop running random by runRandom = False and stop the timer:

# [...]elif event.type == runRandomEvent:
    runRandom = False
    pygame.time.set_timer(runRandomEvent, 0)

Apply the suggestion to your code somehow like this:

# define user event for the timer
runRandomEvent = pygame.USEREVENT + 1defloop():
    clock = pygame.time.Clock()
    number = 0# The button is just a rect.
    button = pygame.Rect(300,300,205,80)
    done = False
    runRandom = Falsewhilenot done:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True# This block is executed once for each MOUSEBUTTONDOWN event.elif event.type == pygame.MOUSEBUTTONDOWN:
                # 1 is the left mouse button, 2 is middle, 3 is right.if event.button == 1:
                    # `event.pos` is the mouse position and  "random" is not runningif button.collidepoint(event.pos) andnot runRandom:
                        # Incremt the number.
                        number += 1# Start timer and enable running "random"
                        runRandom = True
                        pygame.time.set_timer(runRandomEvent, 5000) # 5000 millisecondselif event.type == runRandomEvent:
                runRandom = False
                pygame.time.set_timer(runRandomEvent, 0)

        # [...]# run "random"if runRandom:
            random()

        # [...]  

Post a Comment for "Call Function By Button Click In Pygame"