docs/reST/ref/mouse.rst
.. include:: common.txt
pygame.mouse.. module:: pygame.mouse :synopsis: pygame module to work with the mouse
| :sl:pygame module to work with the mouse
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 and
pygame.MOUSEBUTTONUP events when they are pressed and released. These
events contain a button attribute representing which button was pressed. The
mouse wheel will generate pygame.MOUSEBUTTONDOWN and
pygame.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 a pygame.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() and pygame.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 and y), as well as flipped 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#input>_
In pygame 2, the mouse wheel functionality can be used by listening for the
pygame.MOUSEWHEEL type of an event (Bear in mind they still emit
pygame.MOUSEBUTTONDOWN events like in pygame 1.x, as well).
When this event is triggered, a developer can access the appropriate Event object
with pygame.event.get(). The object can be used to access data about the mouse
scroll, such as which (it will tell you what exact mouse device trigger the event).
.. code-block:: python :caption: Code example of mouse scroll (tested on 2.0.0.dev7) :name: test.py
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)
main()
.. function:: get_pressed
| :sl:get the state of the mouse buttons
| :sg:get_pressed(num_buttons=3) -> (button1, button2, button3)
| :sg:get_pressed(num_buttons=5) -> (button1, button2, button3, button4, button5)
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.
Note, to get all of the mouse events it is better to use either
pygame.event.wait() or pygame.event.get() and check all of those
events to see if they are MOUSEBUTTONDOWN, MOUSEBUTTONUP, or
MOUSEMOTION.
Note, that on X11 some X servers use middle button emulation. When you
click both buttons 1 and 3 at the same time a 2 button event
can be emitted.
Note, remember to call pygame.event.get() 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 to 5, button4 and button5
are added to the returned tuple. Only 3 and 5 are valid values
for this parameter.
.. versionchanged:: 2.0.0 num_buttons argument added
.. ## pygame.mouse.get_pressed ##
.. function:: get_pos
| :sl:get the mouse cursor position
| :sg:get_pos() -> (x, y)
Returns the x and y 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.
.. ## pygame.mouse.get_pos ##
.. function:: get_rel
| :sl:get the amount of mouse movement
| :sg:get_rel() -> (x, y)
Returns the amount of movement in x and y 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.get_rel ##
.. function:: set_pos
| :sl:set the mouse cursor position
| :sg:set_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_pos ##
.. function:: set_visible
| :sl:hide or show the mouse cursor
| :sg:set_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.set_visible ##
.. function:: get_visible
| :sl:get the current visibility state of the mouse cursor
| :sg:get_visible() -> bool
Get the current visibility state of the mouse cursor. True if the mouse is
visible, False otherwise.
.. versionadded:: 2.0.0
.. ## pygame.mouse.get_visible ##
.. function:: get_focused
| :sl:check if the display is receiving mouse input
| :sg:get_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.get_focused ##
.. function:: set_cursor
| :sl:set the mouse cursor to a new cursor
| :sg:set_cursor(pygame.cursors.Cursor) -> None
| :sg:set_cursor(size, hotspot, xormasks, andmasks) -> None
| :sg:set_cursor(hotspot, surface) -> None
| :sg:set_cursor(constant) -> None
Set the mouse cursor to something new. This function accepts either an explicit
Cursor object or arguments to create a Cursor object.
See :class:pygame.cursors.Cursor for help creating cursors and for examples.
.. versionchanged:: 2.0.1
.. ## pygame.mouse.set_cursor ##
.. function:: get_cursor
| :sl:get the current mouse cursor
| :sg:get_cursor() -> pygame.cursors.Cursor
Get the information about the mouse system cursor. The return value contains
the same data as the arguments passed into :func:pygame.mouse.set_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.
.. versionchanged:: 2.0.1
.. ## pygame.mouse.get_cursor ##
.. ## pygame.mouse ##