我的目标是制作一个脚本,当您键入“medo1”时,它会自动键入 for 循环内出现的文本。但显然,last5 根本无法更改,并且该函数是通过自己输入内容来运行的。有什么帮助吗?
from pynput.keyboard import Key,Listener;import pyautogui as pa,time as t
musics=['medo1=link1','medo2=link2','medo3=link3','medo4=link4','medo5=link5']
last5=['a','a','a','a','a']
def on_press(key):
if key==Key.esc:return
global last5
d='aaaaa'
try:last5.append(key.char);last5.pop(0);d=''.join(last5)
except:pass
for m in musics:
if d in m:
pa.press('backspace',presses=99);pa.typewrite('b.p '+m.split('=')[1]);t.sleep(0.03);pa.press("enter")
pa.typewrite('b.loop all');t.sleep(0.1);pa.press("enter");last5=['a','a','a','a','a'];break
# Collect events until released
with Listener(on_press=on_press) as listener:listener.join()
我试图通过输入“medo1”来使其工作,结果确实如此,但它进入了无限循环,我必须删除 Visual Studio 内的终端。
最佳答案
问题是你的监听器正在监听它自己,至于 CHF 的 Answer 的问题,我们不能只是停止和启动监听器。在下面的代码中,我们在停止当前监听器后完全启动另一个监听器。
from pynput.keyboard import Key,Listener;import pyautogui as pa,time as t
musics=['medo1=link1','medo2=link2','medo3=link3','medo4=link4','medo5=link5']
last5=['a','a','a','a','a']
loopedOnce=False
def on_press(key,listener):
if key==Key.esc:return
global last5,loopedOnce
d='aaaaa'
try:last5.append(key.char);last5.pop(0);d=''.join(last5)
except:pass
for m in musics:
if d in m:
listener.stop()
pa.press('backspace', presses=99)
pa.typewrite('b.p ' + m.split('=')[1])
t.sleep(0.03)
pa.press("enter")
pa.typewrite('b.loop all')
t.sleep(0.1)
pa.press("enter")
last5 = ['a', 'a', 'a', 'a', 'a']
loopedOnce=True
break
# Collect events until released
while not(loopedOnce):
with Listener(on_press=lambda key: on_press(key, listener)) as listener: listener.join()
loopedOnce=False
关于python - 无法使 python 宏工作,只是执行无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77827324/