Попытка сделать блокировку курсора, не работает по неизвестным причинам - PullRequest
1 голос
/ 10 апреля 2020

Пожалуйста, помогите мне, нет ошибок, setDisabled просто не вызывается всякий раз, когда я нажимаю N после нажатия H. Если кто-нибудь знает, как улучшить или исправить, пожалуйста, помогите. Код:

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()

1 Ответ

0 голосов
/ 10 апреля 2020

Когда вы нажимаете h, keyboard запускает resetMouse, который запускается снова resetMouse и снова запускается resetMouse, поэтому эта функция никогда не заканчивается - у вас есть рекурсия - и она никогда не go возвращается к keyboard и он не может проверить другие ключи.

Вам придется запустить resetMouse по-другому - ie. Вы можете запустить его в l oop, который поддерживает выполнение программы. И resetMouse не должен запускаться снова resetMouse, но этот l oop должен работать.

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()
...