Event.Pos Pygame Tutorial – Complete Guide

Welcome, game enthusiasts and aspiring coders alike, to an exciting tutorial centered around the intriguing aspect of Pygame – “event.pos”. This feature is a fundamental element of many games and understanding it can greatly enhance your game creation capabilities.

What is event.pos in Pygame?

Event.pos in Pygame is a pair of coordinates (x, y) that define the location of the mouse pointer on the screen at any given time. It is particularly useful when you need to trigger actions or changes in gameplay based on mouse movement.

What is it used for?

As previously mentioned, ‘event.pos’ in Pygame enables us to trigger activities or changes in gameplay depending on the mouse position. For instance, if you’re building a top-down shooter game, you can use this feature to aim or direct the character’s movements, bringing a level of interactivity and engagement to your game.

Why should I learn it?

By mastering ‘event.pos’ in Pygame, you’re diving deeper into the world of game development. Not only will this increase your understanding of how games work, but it will also equip you with the technical skills needed to build interactive and dynamic games of your own. Now, let’s move on to the practical examples to solidify your understanding.

CTA Small Image

Getting the Mouse Position with Event.pos

The first thing you’re going to want to do is import pygame.

import pygame

Your next step is to initialize pygame.


Then, we will set up your display – we’ll use a 500×500 dimension for this example.

win = pygame.display.set_mode((500, 500))

Then, within the main game loop, we can use ‘event.pos’ to get the mouse position. By printing it out, you can see it in your console.

run = True
while run:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      run = False
    elif event.type == pygame.MOUSEBUTTONDOWN:

When you run the above code and click anywhere within the game window, you’ll see the (x, y) coordinates printed in your console.

Animating a Character with Event.pos

Let’s take this to the next level and create an animated character that will move towards the cursor each time you click within the game window.

First, let’s go ahead and create a character. For simplicity, we’ll just use a rectangle.

charX = 50
charY = 50
charW = 50
charH = 50

Within the game loop, let’s draw our character.

win.fill((0,0,0))  # This will fill the screen black. 

pygame.draw.rect(win, (255, 0, 0), (charX, charY, charW, charH))

Now, let’s make our character move to the cursor when you click anywhere in the game window. We’ll use ‘event.pos[0]’ and ‘event.pos[1]’ to get the x and y positions, respectively.

elif event.type == pygame.MOUSEBUTTONDOWN:
  charX = event.pos[0]
  charY = event.pos[1]

Your character will now move to wherever you click within the window!

Advanced Uses of Event.pos

Given that you now have an understanding of the basics, let’s move on to more advanced uses of ‘event.pos’.

For example, you might want to trigger certain events when the player clicks on specific locations.

Suppose you have a game with a clickable menu. You can use ‘event.pos’ to determine if the player clicked on the buttons.

elif event.type == pygame.MOUSEBUTTONDOWN:
  # If the player clicked within the "Start" button
  if 20 <= event.pos[0] <= 120 and 100 <= event.pos[1] <= 150:
    print("Start button clicked!")

With ‘event.pos’, you can identify clicks on any area you want, offering an endless array of possibilities for your games.Great! Let’s proceed further into some more complex usages of the Pygame ‘event.pos’ function.

Dragging and Dropping Items with Event.pos

Making objects draggable in your game implies a smooth interaction and higher engagement for the player. To take an instance, let’s make a draggable rectangle using pygame and the ‘event.pos’ function.

In the initial setup of the main loop, create a boolean variable draggable that indicates if the rectangle is draggable or not.

rect = pygame.Rect(50, 50, 50, 50)
draggable = False

Following this step, we modify the event loop as follows:

for event in pygame.event.get():
      if event.type == pygame.QUIT:
          run = False
      elif event.type == pygame.MOUSEBUTTONDOWN:
          if rect.collidepoint(event.pos):
              draggable = True
      elif event.type == pygame.MOUSEBUTTONUP:
          draggable = False

The ‘collidepoint(event.pos)’ function checks whether the mouse pointer is clicking within the rectangle or not when the mouse button goes down. When such an event occurs, the draggable state is set to “True”. In contrast, if the mouse button goes up, the draggable state is set to “False”.

Then, you should include the following code lines under your running game loop:

if draggable:
    rect.center = pygame.mouse.get_pos()
pygame.draw.rect(win, (0, 255, 0), rect)

With this, we’ve made the rectangle draggable!

Detecting Hovering Over a Button

Another interesting aspect that can increase the interaction of a user with a game is reacting to hovering. Let’s show this through a simple button hover.

First, we create a button using a rectangle:

button = pygame.Rect(200, 200, 50, 50)

Then, within the game loop, we can check if the mouse’s current position, obtained with ‘pygame.mouse.get_pos()’, is within the button. If so, we change its color:

mouse_pos = pygame.mouse.get_pos() 

if button.collidepoint(mouse_pos):
  # Change color to Green if mouse is over the button
  button_color = (0, 255, 0)
  # Default is Red
  button_color = (255, 0, 0)

pygame.draw.rect(win, button_color, button)

Try running your game now and hovering over the button, you will see the button color change to green.

Both examples here illustrate how the ‘event.pos’ function allows us to create more interactive games by reacting to different user interactions. The possibilities are endless!Alright, let’s explore a couple more code examples to illustrate the versatility of the Pygame ‘event.pos’ function.

Creating a Drawing Application

Believe it or not, you can also use Pygame and ‘event.pos’ to create a simple drawing application! We can use the ‘pygame.draw.circle()’ method to draw circles at the point of our mouse whenever we hold down the left mouse button.

The first step is to set up a boolean variable ‘drawing’, which will control whether we are drawing or not.

drawing = False

Next, we modify the event loop as follows:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        run = False
    elif event.type == pygame.MOUSEBUTTONDOWN:
        if event.button == 1:
            drawing = True
    elif event.type == pygame.MOUSEBUTTONUP:
        if event.button == 1:
            drawing = False

In the loop, ‘event.button’ is equal to 1 when the left mouse button is pressed and, at this stage, we start drawing.

We stop drawing when the left mouse button is released.

Finally, we update our game loop to include drawing circles at our mouse’s position whenever the ‘drawing’ boolean is true.

if drawing:
    pygame.draw.circle(win, (255, 255, 255), pygame.mouse.get_pos(), 5)

Go ahead, run your game and start drawing!

Changing the Size of an Object with The Scroll Wheel

Did you know that you can also detect when the scroll wheel of the mouse is being used with Pygame? It’s true!

To demonstrate this, let’s increment or decrement the side length of a square each time the scroll wheel is used.

First, let’s create our square:

square_side_length = 50
square = pygame.Rect(250, 250, square_side_length, square_side_length)

Now, let’s modify our event loop to include an event for scrolling:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        run = False
    elif event.type == pygame.MOUSEBUTTONDOWN:
        if event.button == 4: # Scroll Up
            square_side_length += 5
        elif event.button == 5: # Scroll Down
            square_side_length -= 5

Here, ‘event.button’ is equal to 4 when the scroll wheel is pushed up and equal to 5 when the scroll wheel is pushed down.

Now, let’s display our square in the game loop:

square = pygame.Rect(250, 250, square_side_length, square_side_length)
pygame.draw.rect(win, (0, 0, 255), square)

With these examples, we can see how catching Pygame events and working with ‘event.pos’ can allow us to create highly interactive applications and games. It unlocks a multitude of possibilities and makes our games user-friendly and captivating at the same time!As you continue your journey into game development and more advanced Python functions, we highly recommend that you check out our comprehensive Python Mini-Degree.

Our Python Mini-Degree is designed to equip you with the fundamental and advanced skills of Python programming, featuring projects such as creating games, algorithms, and real-world apps. It covers coding basics, algorithms, object-oriented programming, game development, and app development. This curriculum is designed to cater to learners of various levels of expertise, from beginners to more experienced programmers.

If you are interested in a broader collection of Python content, feel free to explore our full Python courses. With Zenva, you will never stop learning! Our comprehensive and flexible courses can support you every step of the way, whether you are seeking to change your career or enhance your existing skills. Happy learning!


We hope that this tutorial has helped to answer your questions about ‘event.pos’ in Pygame and spark your curiosity in game development. Understanding and effectively using ‘event.pos’ is a remarkable scope to add interactive elements to your games, enhancing the overall user experience. It’s one more step in your path towards becoming a proficient game developer.

Remember, the learning never stops. If you’re all set to level up your game development skills, do check out our extensive Python Mini-Degree. With Zenva, you’re always at the forefront of learning, pushing your boundaries, and creating amazing things. Happy coding to you!

Did you come across any errors in this tutorial? Please let us know by completing this form and we’ll look into it!

Python Blog Image

FINAL DAYS: Unlock coding courses in Unity, Godot, Unreal, Python and more.