Skip to content
This repository was archived by the owner on Feb 13, 2026. It is now read-only.
This repository was archived by the owner on Feb 13, 2026. It is now read-only.

release() in thread #132

@johannes-do

Description

@johannes-do

When I release() in a thread and then press() again in another is_pressed() will always return False.

Here is some code example:

import mouse
import time
import threading


def release_mouse():
    while True:
        time.sleep(2)
        print("Release Mouse")
        mouse.release("left")


t = threading.Thread(target=release_mouse)
t.daemon = True
t.start()

while True:
    time.sleep(0.2)
    if not mouse.is_pressed("left"):
        print(f"Press Mouse")
        mouse.press("left")

expectation is that the output looks sth like this:
Press Mouse
Release Mouse
Press Mouse
Release Mouse
Press Mouse
....

But it looks like this:
Press Mouse
Release Mouse
Press Mouse
Press Mouse
Press Mouse
Press Mouse
Press Mouse
Press Mouse
Press Mouse
Press Mouse
Press Mouse
Press Mouse
Release Mouse
Press Mouse
Press Mouse

When keeping track of it on my own with a flag, I get the expected output:

import mouse
import time
import threading

is_pressed = True


def release_mouse():
    global is_pressed
    while True:
        time.sleep(2)
        print("Release Mouse")
        mouse.release("left")
        is_pressed = False


t = threading.Thread(target=release_mouse)
t.daemon = True
t.start()

while True:
    time.sleep(0.2)
    if not is_pressed:
        print(f"Press Mouse")
        mouse.press("left")
        is_pressed = True

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions