在定义热键和模拟鼠标单击时,Pynput似乎与pyautogui冲突

2024-04-29 12:50:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是使用自定义热键在Python中执行不同的函数。我通过谷歌搜索找到了Pynput。以下是Pynput文档(https://pynput.readthedocs.io/en/latest/keyboard.html#controlling-the-keyboard)中的官方示例:

from pynput import keyboard

def on_activate():
    print('Global hotkey activated!')

def for_canonical(f):
    return lambda k: f(l.canonical(k))

hotkey = keyboard.HotKey(
    keyboard.HotKey.parse('<ctrl>+<alt>+h'),
    on_activate)
with keyboard.Listener(
        on_press=for_canonical(hotkey.press),
        on_release=for_canonical(hotkey.release)) as l:
    l.join()

我只使用了几行pyautogui命令。因此,我的代码如下所示:

from pynput import keyboard
import pyautogui, time

def on_activate_h():
    pyautogui.click(1000, 500)
    pyautogui.click(1000, 600)
##    time.sleep(0.5)
    pyautogui.click(1000, 700)
    pyautogui.click(1000, 800)
    print('<ctrl>+<alt>+h pressed')

def on_activate_i():
    print('<ctrl>+<alt>+i pressed')

with keyboard.GlobalHotKeys({
        '<ctrl>+<alt>+h': on_activate_h,
        '<ctrl>+<alt>+i': on_activate_i}) as h:
    h.join()

在执行代码时,会发生一些奇怪的事情。第一次或第二次按“Ctrl+Alt+h”时,效果良好。然后我发现按下“Ctrl+Alt”也会执行on_activate_h()函数中的代码

当我删除四行pyautogui.click()中的一行时,问题似乎消失了。但是,当连续快速按两次“Ctrl+Alt+h”时,问题又出现了

我试图通过在第7行中插入“time.sleep(0.5)”一行来解决这个问题,但它不起作用。问题依然存在

我是一个自学成才的新手程序员,在automatetheboringstuff.com在线学习了一些Python。所以我觉得这个问题很奇怪。有人能帮我解决这个问题吗?或者有没有更好的方法来定义不同的热键来运行不同的代码?提前谢谢。如果有任何解决办法,我将不胜感激


Tags: 代码importforondefaltactivateclick