【发布时间】:2020-02-01 03:47:19
【问题描述】:
我有一个 Python 模块,它使用 pynput 侦听组合键,然后一旦按下它,它就会在文本程序中键入一个字符串。
效果很好!除了...
在下面的示例中,用户的组合键设置为 shift + space。这很有意义,并且可能是运行我的程序的 Windows 用户最常用的选择键命令。问题是,当按住 shift 键时,它会改变 pynput 的类型。它将键入 )!/20/2019,而不是 01/20/2019。
我需要一种方法来禁用键盘,直到 pyautogui 完成输入字符串。非常感谢您的帮助!!!
额外问题:当组合键包含 ctrl 键时,我似乎无法获得结果。 Key.ctrl 根本无法触发,而其他键工作正常。
from pynput.keyboard import Key, Controller, Listener
import time
keyboard = Controller()
def insert(): # check line 1 of config file
keyboard.type('01/20/2019')
# The currently active modifiers
current = set()
def on_press(key):
if key in COMBINATION:
current.add(key)
if all(k in current for k in COMBINATION): # I don't know what this k in current for k shit is.
current.remove(key)
insert() # run insert
if key == Key.esc:
listener.stop()
def on_release(key):
try:
current.remove(key)
except KeyError:
pass
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
``
【问题讨论】:
-
您可能会在尝试同时使用
pynput和pyautogui时遇到冲突,因为它们都处理用户事件。你可以通过写一些只使用前者的东西来验证这一点,看看是否有类似的问题。 -
谢谢。你会认为这个问题出乎意料吗?无论我使用哪个模块键入字符串,它都会发生对我来说似乎是有道理的。我尝试使用 pynput 的 keyboard.type 方法,但由于某种原因它根本不会触发任何东西。
-
我成功地让 pynput 的 keyboard.type(insert.timestamp) 工作,但正如我所建议的,问题是一样的。不过,我很高兴它的类型,因为 pyautogui 不适用于 OSX 用户。谢谢!
-
不,这不足为奇,因为它在某种程度上是每个模块所做的固有或固有的。可能有解决方法……或者您可以使用
pyautogui完成所需的一切。 -
现在完全使用 pynput,但问题仍然存在。
标签: python user-input pynput