我已经创建了一个宏,我想让它在运行py文件时不会发生任何事情,但是当我单击某个键时,if语句会运行while循环,当我再次单击该键时,脚本会暂停。
import time
import keyboard
time.sleep(3)
while True:
try:
#slot-1
pyautogui.press('2')
pyautogui.click(button= 'left', clicks=1)
time.sleep(0.1)
#slot-2
pyautogui.press('3')
pyautogui.click(button= 'left', clicks=1)
time.sleep(0.1)
#slot-3
pyautogui.press('4')
pyautogui.click(button= 'left', clicks=1)
time.sleep(0.1)
#slot-4
pyautogui.press('5')
pyautogui.click(button= 'left', clicks=1)
time.sleep(0.1)
if keyboard.is_pressed('alt'):
print('Ending Loop')
break
except:
break发布于 2021-04-19 07:56:03
要启动循环,可以使用input() (按return / enter直接启动)
要完成此操作,请按ctrl +c并捕获KeyboardInterrupt异常
import time
import keyboard
time.sleep(3)
# press enter to start
input()
# press ctrl + c to finish
while True:
try:
#slot-1
pyautogui.press('2')
pyautogui.click(button= 'left', clicks=1)
time.sleep(0.1)
#slot-2
pyautogui.press('3')
pyautogui.click(button= 'left', clicks=1)
time.sleep(0.1)
#slot-3
pyautogui.press('4')
pyautogui.click(button= 'left', clicks=1)
time.sleep(0.1)
#slot-4
pyautogui.press('5')
pyautogui.click(button= 'left', clicks=1)
time.sleep(0.1)
if keyboard.is_pressed('alt'):
print('Ending Loop')
break
except Exception as e:
if e == KeyboardInterrupt:
print('script stopped by user')发布于 2021-04-19 08:13:33
为了解决你的问题,我混合使用了线程和全局变量。我还不得不求助于pynput模块,而不是“键盘”。虽然这是一个小的变通方法,但在您的场景中最好的解决方案是使用"async“(异步编程),以防止阻塞while循环的问题。这些循环将不允许程序的任何其他部分运行。这意味着我们的程序一旦进入while循环,就不能检测到按键。我之所以没有使用async,仅仅是因为我不熟悉它的语法,也不想让这个答案比它应该的更复杂。
import time
import keyboard
import pyautogui
from pynput.keyboard import Key, Listener
import threading
time.sleep(3)
closed = False
def begin_clicks():
global closed
while True:
print(closed)
if closed:
break
try:
#slot-12
pyautogui.press('2')
pyautogui.click(button= 'left', clicks=1)
time.sleep(0.1)
#slot-2
pyautogui.press('3')
pyautogui.click(button= 'left', clicks=1)
time.sleep(0.1)
#slot-33
pyautogui.press('4')
pyautogui.click(button= 'left', clicks=1)
time.sleep(0.1)
#slot-4
pyautogui.press('5')
pyautogui.click(button= 'left', clicks=1)
time.sleep(0.1)
except:
pass
thread = None
def on_press(key):
global closed
if str(key)[1] == "p":
closed = False
threading.Thread(target=begin_clicks).start()
elif key == Key.alt:
closed = True
with Listener(
on_press=on_press) as listener:
listener.join()https://stackoverflow.com/questions/67154371
复制相似问题