Я пытаюсь создать раскладку клавиатуры , чтобы моя клавиатура не использовала Microsoft бесполезно IME keyboard
. Итак, я написал этот код python
с pynput
.
Но похоже, что он не выполняет мою функцию execute()
from pynput.keyboard import Key, Controller current = set() keyboard_typ = Controller() COMBINATIONS = [ {keyboard.KeyCode(char="q")}, {keyboard.KeyCode(char="Q")}, {keyboard.KeyCode(char="w")}, {keyboard.KeyCode(char="W")}, {keyboard.KeyCode(char="e")}, {keyboard.KeyCode(char="E")}, {keyboard.KeyCode(char="r")}, {keyboard.KeyCode(char="R")}, {keyboard.KeyCode(char="t")}, {keyboard.KeyCode(char="T")}, {keyboard.KeyCode(char="y")}, {keyboard.KeyCode(char="Y")}, {keyboard.KeyCode(char="u")}, {keyboard.KeyCode(char="U")}, {keyboard.KeyCode(char="i")}, {keyboard.KeyCode(char="I")}, {keyboard.KeyCode(char="o")}, {keyboard.KeyCode(char="O")}, {keyboard.KeyCode(char="p")}, {keyboard.KeyCode(char="P")}, {keyboard.KeyCode(char="a")}, {keyboard.KeyCode(char="A")}, {keyboard.KeyCode(char="s")}, {keyboard.KeyCode(char="S")}, {keyboard.KeyCode(char="d")}, {keyboard.KeyCode(char="D")}, {keyboard.KeyCode(char="f")}, {keyboard.KeyCode(char="F")}, {keyboard.KeyCode(char="g")}, {keyboard.KeyCode(char="G")}, {keyboard.KeyCode(char="h")}, {keyboard.KeyCode(char="H")}, {keyboard.KeyCode(char="j")}, {keyboard.KeyCode(char="J")}, {keyboard.KeyCode(char="k")}, {keyboard.KeyCode(char="K")}, {keyboard.KeyCode(char="l")}, {keyboard.KeyCode(char="L")}, {keyboard.KeyCode(char="z")}, {keyboard.KeyCode(char="Z")}, {keyboard.KeyCode(char="x")}, {keyboard.KeyCode(char="X")}, {keyboard.KeyCode(char="c")}, {keyboard.KeyCode(char="C")}, {keyboard.KeyCode(char="v")}, {keyboard.KeyCode(char="V")}, {keyboard.KeyCode(char="b")}, {keyboard.KeyCode(char="B")}, {keyboard.KeyCode(char="n")}, {keyboard.KeyCode(char="N")}, {keyboard.KeyCode(char="m")}, {keyboard.KeyCode(char="M")}, ] def on_press(key) : if any([key in COMBO for COMBO in COMBINATIONS]): current.add(key) if any(all(k in current for k in COMBO) for COMBO in COMBINATIONS): execute() def execute() : if current == "q": print("q") def on_release(key) : if any([key in COMBO for COMBO in COMBINATIONS]): current.remove(key) with keyboard.Listener(on_press=on_press, on_release=on_release) as listener : listener.join()
3 ответа
Execute () имеет current
, но вы никогда не передаете такую переменную функции, поэтому вы ничего не сравниваете. Ваша функция должна выглядеть так
def execute(current) :
if current == "q":
print("q")
Поразмыслив над теорией "установки струн" Хоакина, я преобразовал свой set
в string
и это сработало.
Спасибо, Хоакин.
def execute(current_key) : s = str(current_key) for i in s : if i == "q" : print("q")
Если вы передадите current
функции, все клавиши будут нажаты сейчас и будет использоваться цикл или условие if для проверки клавиши в нажатых клавишах. или просто передайте key
, если вам нужна только последняя нажатая клавиша.
def on_press(key) :
if any([key in COMBO for COMBO in COMBINATIONS]):
current.add(key)
if any(all(k in current for k in COMBO) for COMBO in COMBINATIONS):
execute(current)
def execute(current_key_set) :
for key in current_key_set:
print(key)
Или
def on_press(key) :
if any([key in COMBO for COMBO in COMBINATIONS]):
current.add(key)
if any(all(k in current for k in COMBO) for COMBO in COMBINATIONS):
execute(key)
def execute(current_key) :
print(current_key)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.