使用pynput的globalhotkeys时单个按键触发了组合键的函数

使用pynput的globalhotkeys时单个按键触发了组合键的函数

我写了一个python的快捷键脚本,使用到了pynput的globalhotkeys来添加多个组合键。当第一次使用组合键时可以触发指定的函数,但是之后仅仅只需要组合键中的一个键就可以触发这个函数。

from pynput import keyboard
import webbrowser

def openurl():
    webbrowser.open('https://google.com')

def esc():
    hotkey.stop()

with keyboard.GlobalHotKeys(
    {'<ctrl>+0': openurl,
     '<ctrl>+o': esc
     }
)as hotkey:
    hotkey.join()

比如:上面的代码实现了ctrl + 0的组合键打开谷歌的网站,如果刚运行,使用ctrl或者0是无法触发的,只有使用了组合键才可以启动。但是一旦启动了一次后,之后仅需要使用ctrl键就可以触发。

img

这个问题有时出现,有时又不出现,很奇怪。

引用 皆我百晓生 小程序回复内容作答:
这是因为在Windows系统中,HotKey实现有时会出现延迟或冲突的问题。可以尝试使用以下方法解决这个问题:

  1. 确保没有其他应用程序正在使用相同的热键,以避免冲突。
  2. 在注册热键之前,尝试在脚本的开头增加一些延迟时间,以确保程序运行时所有组件都已加载完毕。
    import time
    
    time.sleep(1)  # 延迟一秒钟,确保系统准备就绪
    
  3. 可以尝试使用其他热键库,如pynput.keyboard.Listener,它也可以注册全局快捷键。

如果以上方法无法解决问题,可以考虑使用其他库或方法实现类似的功能。