не работает горячая клавиша

код

import pyautogui as pg
import keyboard as key
import time
from interface import *

pos_inp = print(pg.position())
pos = pos_inp

run = True

def clicker():
    while run:
        pg.tripleClick(pos)

def ClickerStop():
    clicker.pop

key.add_hotkey('F5', lambda: clicker())
key.wait('F6')
key.add_hotkey('F6', lambda: ClickerStop())
key.wait('F6')

при нажатие на ф6 функция кликер должна остановиться, но она не останавиваеться! помогите пожалуйста я ломаю голову над этим уже целый день!!


Ответы (1 шт):

Автор решения: Александр

Использование глобальных переменных - ЗЛО! :-)

import pyautogui
import keyboard
import time
from threading import Thread

isRunning = True

def clicker_start():
    print("call clicker_start")
    global isRunning
    while isRunning:
        #pyautogui.tripleClick(pyautogui.position())
        print(pyautogui.position())
        time.sleep(0.1)
    

def clicker_stop():
    print("call clicker_stop")
    global isRunning
    isRunning = False

def main():
    keyboard.add_hotkey('F5', Thread(target=clicker_start).start)
    keyboard.wait("F5")
    keyboard.add_hotkey("F6", clicker_stop)
    keyboard.wait("F6")

if __name__ == '__main__':
    main()

До

key.add_hotkey('F6', lambda: ClickerStop())

дело не доходило так как эта фукнция

clicker

блокировала основной поток.

Немного подумав...

import pyautogui
import keyboard
import time
from threading import Thread


class AutoClicker(Thread):
    running = True
    def __init__(self):
        super().__init__()
    def start_clicker(self):
        print("clicker started...")
        while self.running:
            print(pyautogui.position())
            # pyautogui.tripleClick(pyautogui.position())
            time.sleep(0.1)
    def stop_clicker(self):
        print("clicker stoped...")
        self.running = False
    def run(self):
        self.start_clicker()
      
def main():
    auto_clicker = AutoClicker()

    keyboard.add_hotkey('F5', auto_clicker.start)
    keyboard.wait("F5")
    keyboard.add_hotkey("F6", auto_clicker.stop_clicker)
    keyboard.wait("F6")

if __name__ == '__main__':
    main()
→ Ссылка