-
pygame.mouse
- pygame module to work with the mouse
— get the state of the mouse buttons — get the most recently pressed buttons — get the most recently released buttons — get the mouse cursor position — get the amount of mouse movement — set the mouse cursor position — hide or show the mouse cursor — get the current visibility state of the mouse cursor — check if the display is receiving mouse input — set the mouse cursor to a new cursor — get the current mouse cursor — query whether relative mouse mode is enabled — set relative mouse mode The mouse functions can be used to get the current state of the mouse device. These functions can also alter the system cursor for the mouse.
When the display mode is set, the event queue will start receiving mouse events. The mouse buttons generate
pygame.MOUSEBUTTONDOWN
andpygame.MOUSEBUTTONUP
events when they are pressed and released. These events contain a button attribute representing which button was pressed. The mouse wheel will generatepygame.MOUSEBUTTONDOWN
andpygame.MOUSEBUTTONUP
events when rolled. The button will be set to 4 when the wheel is rolled up, and to button 5 when the wheel is rolled down. Whenever the mouse is moved it generates apygame.MOUSEMOTION
event. The mouse movement is broken into small and accurate motion events. As the mouse is moving many motion events will be placed on the queue. Mouse motion events that are not properly cleaned from the event queue are the primary reason the event queue fills up.If the mouse cursor is hidden, and input is grabbed to the current display the mouse will enter a virtual input mode, where the relative movements of the mouse will never be stopped by the borders of the screen. See the functions
pygame.mouse.set_visible()
andpygame.event.set_grab()
to get this configured.Mouse Wheel Behavior in pygame 2
There is proper functionality for mouse wheel behaviour with pygame 2 supporting
pygame.MOUSEWHEEL
events. The new events support horizontal and vertical scroll movements, with signed integer values representing the amount scrolled (x
andy
), as well asflipped
direction (the set positive and negative values for each axis is flipped). Read more about SDL2 input-related changes here https://wiki.libsdl.org/MigrationGuide#inputIn pygame 2, the mouse wheel functionality can be used by listening for the
pygame.MOUSEWHEEL
type of an event (Bear in mind they still emitpygame.MOUSEBUTTONDOWN
events like in pygame 1.x, as well). When this event is triggered, a developer can access the appropriateEvent
object withpygame.event.get()
. The object can be used to access data about the mouse scroll, such aswhich
(it will tell you what exact mouse device trigger the event).# Taken from husano896's PR thread (slightly modified) import pygame from pygame.locals import * pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() def main(): while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() return elif event.type == MOUSEWHEEL: print(event) print(event.x, event.y) print(event.flipped) print(event.which) # can access properties with # proper notation(ex: event.y) clock.tick(60) # Execute game: main()
- pygame.mouse.get_pressed()¶
- get the state of the mouse buttonsget_pressed(num_buttons=3, desktop=False) -> (left_button, middle_button, right_button)get_pressed(num_buttons=5, desktop=False) -> (left_button, middle_button, right_button, x1_button, x2_button)
Returns a sequence of booleans representing the state of all the mouse buttons. A true value means the mouse is currently being pressed at the time of the call.
To get all of the mouse events it is better to use either
pygame.event.wait()
orpygame.event.get()
and check all of those events to see if they areMOUSEBUTTONDOWN
,MOUSEBUTTONUP
, orMOUSEMOTION
. Remember to callpygame.event.get()
orpygame.event.pump()
before this function, otherwise it will not work as expected.To support five button mice, an optional parameter
num_buttons
has been added in pygame 2. When this is set to5
,button4
andbutton5
are added to the returned tuple. Only3
and5
are valid values for this parameter.If the
desktop
argument isTrue
the mouse state will be correct even if the window has no focus. In addition since it queries the OS it does not depend on the last event pump while being slightly slower.Note
On
X11
some X servers use middle button emulation. When you click both buttons1
and3
at the same time a2
button event can be emitted.Warning
Due to design constraints it is impossible to retrieve the desktop mouse state on Wayland. The normal mouse state is returned instead.
Changed in pygame 2.0.0:
num_buttons
argument addedChanged in pygame-ce 2.5.2: Added the
desktop
argument
- pygame.mouse.get_just_pressed()¶
- get the most recently pressed buttonsget_just_pressed() -> (left_button, middle_button, right_button, x1_button, x2_button)
Very similar to
pygame.mouse.get_pressed()
get the state of the mouse buttons, returning a tuple of length 5 with the important difference that the buttons are True only in the frame they start being pressed. This can be convenient for checking the buttons pressed "this frame", but for more precise results and correct ordering prefer using thepygame.MOUSEBUTTONDOWN
event.The result of this function is updated when new events are processed, e.g. in
pygame.event.get()
get events from the queue orpygame.event.pump()
internally process pygame event handlers.if pygame.mouse.get_just_pressed()[0]: print("LMB just pressed")
New in pygame-ce 2.5.0.
- pygame.mouse.get_just_released()¶
- get the most recently released buttonsget_just_released() -> (left_button, middle_button, right_button, x1_button, x2_button)
Similar to
pygame.mouse.get_pressed()
get the state of the mouse buttons, returning a tuple of length 5 with the important difference that the buttons are True only in the frame they stop being pressed. This can be convenient for checking the buttons released "this frame", but for more precise results and correct ordering prefer using thepygame.MOUSEBUTTONUP
event.The result of this function is updated when new events are processed, e.g. in
pygame.event.get()
get events from the queue orpygame.event.pump()
internally process pygame event handlers.if pygame.mouse.get_just_released()[0]: print("LMB just released")
New in pygame-ce 2.5.0.
- pygame.mouse.get_pos()¶
- get the mouse cursor positionget_pos(desktop=False) -> (x, y)
By default returns the
x
andy
position of the mouse cursor. The position is relative to the top-left corner of the display. The cursor position can be located outside of the display window, but is always constrained to the screen.If the
desktop
argument isTrue
, the position will be instead relative to the top-left corner of the primary monitor. The position might be negative or exceed the desktop bounds if multiple monitors are present.Warning
Due to design constraints it is impossible to retrieve the desktop mouse state on Wayland. The relative mouse position is returned instead.
Changed in pygame-ce 2.5.2: Added the
desktop
argument
- pygame.mouse.get_rel()¶
- get the amount of mouse movementget_rel() -> (x, y)
Returns the amount of movement in
x
andy
since the previous call to this function. The relative movement of the mouse cursor is constrained to the edges of the screen, but see the virtual input mouse mode for a way around this. Virtual input mode is described at the top of the page.
- pygame.mouse.set_pos()¶
- set the mouse cursor positionset_pos([x, y], /) -> None
Set the current mouse position to arguments given. If the mouse cursor is visible it will jump to the new coordinates. Moving the mouse will generate a new
pygame.MOUSEMOTION
event.
- pygame.mouse.set_visible()¶
- hide or show the mouse cursorset_visible(bool, /) -> bool
If the bool argument is true, the mouse cursor will be visible. This will return the previous visible state of the cursor.
- pygame.mouse.get_visible()¶
- get the current visibility state of the mouse cursorget_visible() -> bool
Get the current visibility state of the mouse cursor.
True
if the mouse is visible,False
otherwise.New in pygame 2.0.0.
- pygame.mouse.get_focused()¶
- check if the display is receiving mouse inputget_focused() -> bool
Returns true when pygame is receiving mouse input events (or, in windowing terminology, is "active" or has the "focus").
This method is most useful when working in a window. By contrast, in full-screen mode, this method always returns true.
Note: under
MS
Windows, the window that has the mouse focus also has the keyboard focus. But under X-Windows, one window can receive mouse events and another receive keyboard events.pygame.mouse.get_focused()
indicates whether the pygame window receives mouse events.
- pygame.mouse.set_cursor()¶
- set the mouse cursor to a new cursorset_cursor(pygame.cursors.Cursor) -> Noneset_cursor(size, hotspot, xormasks, andmasks) -> Noneset_cursor(hotspot, surface) -> Noneset_cursor(constant) -> None
Set the mouse cursor to something new. This function accepts either an explicit
Cursor
object or arguments to create aCursor
object.See
pygame.cursors.Cursor
pygame object representing a cursor for help creating cursors and for examples.Changed in pygame 2.0.1.
- pygame.mouse.get_cursor()¶
- get the current mouse cursorget_cursor() -> pygame.cursors.Cursor
Get the information about the mouse system cursor. The return value contains the same data as the arguments passed into
pygame.mouse.set_cursor()
set the mouse cursor to a new cursor.Note
Code that unpacked a get_cursor() call into
size, hotspot, xormasks, andmasks
will still work, assuming the call returns an old school type cursor.Changed in pygame 2.0.1.
- pygame.mouse.get_relative_mode()¶
- query whether relative mouse mode is enabledget_relative_mode() -> bool
Query whether relative mouse mode is enabled.
New in pygame-ce 2.4.0.
- pygame.mouse.set_relative_mode()¶
- set relative mouse modeset_relative_mode(enable, /) -> None
Sets the relative mouse mode state. While the mouse is in relative mode, the cursor is hidden, the mouse position is constrained to the window, and pygame will report continuous relative mouse motion even if the mouse is at the edge of the window.
This function will flush any pending mouse motion."
Calling
pygame.mouse.set_visible()
hide or show the mouse cursor with argumentTrue
will exit relative mouse mode.New in pygame-ce 2.4.0.
Edit on GitHub