не работает горячая клавиша
код
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()