Search code examples
pythonpyautogui

Trying to make a cursor lock, not working for unknown reasons


Please help me, there is no errors the setDisabled is just not called whenever I press N after pressing H. If anyone knows how to improve or fix, please help. Code:

import pyautogui
import keyboard

pyautogui.FAILSAFE = False

enabled = False

def setDisabled(a):
    global enabled
    print 'setDisabled: ' + str(enabled)
    enabled = False
    print 'setDisabled: ' + str(enabled)
    resetMouse()

keyboard.on_release_key('n', setDisabled)

def resetMouse():
    global enabled
    print 'resetMouse: ' + str(enabled)
    if enabled is True:
        pyautogui.moveTo(1, 1, 0)
        resetMouse()
    else:
        print "no"

def setEnabled(a):
    global enabled
    print 'setEnabled: ' + str(enabled)
    enabled = True
    print 'setEnabled: ' + str(enabled)
    resetMouse()

keyboard.on_release_key('h', setEnabled)

resetMouse()

Solution

  • When you press h then keyboard runs resetMouse which runs again resetMouse and it runs again resetMouse so this functions never ends - you have recursion - and it never go back to keyboard and it can't check other keys.

    You would have to run resetMouse in different way - ie. you can run it in loop which keeps program running. And resetMouse shouldn't run again resetMouse but this loop should run.

    import pyautogui
    import keyboard
    import time
    
    # --- functions ---    
    
    def setDisabled(a):
        global enabled
    
        print('setDisabled: ' + str(enabled))
        enabled = False
        print('setDisabled: ' + str(enabled))
    
        #resetMouse()
    
    def setEnabled(a):
        global enabled
    
        print('setEnabled: ' + str(enabled))
        enabled = True
        print('setEnabled: ' + str(enabled))
    
        #resetMouse()
    
    def resetMouse():
        global enabled
    
        #print('resetMouse: ' + str(enabled))
        if enabled: # is True:
            pyautogui.moveTo(1, 1, 0)
        #else:
        #    print("no")
    
    # --- main ---
    
    pyautogui.FAILSAFE = False
    
    enabled = False
    
    keyboard.on_release_key('n', setDisabled)
    keyboard.on_release_key('h', setEnabled)
    
    while True:
        #time.sleep(1) # to use less CPU 
        resetMouse()