python - 无法使 python 宏工作,只是执行无限循环

标签 python listener pyautogui

我的目标是制作一个脚本,当您键入“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/

相关文章:

python - Vagrant 安装 Anaconda Python?

python - 如何比较两个字典以检查它们中是否存在键

python - Python 中的 Monte Carlo 和 Metropolis 算法非常慢

python - 错误 : Could not find a version that satisfies the requirement pyautogui (from versions: none)

python - 如何在我的录音中显示鼠标指针

python-2.7 - 如何使用 PyAutoGUI 检测按键事件?

Python 脚本给出 `: No such file or directory`

Java Swing : Clear JList without triggering listener

JavaFX:将 TextArea 绑定(bind)到选定 TreeItem 的元素(包含在 TreeView 中)

postgresql - 从 PostgreSQL 触发器调用外部程序