简体   繁体   English

execute() function 调用时未执行

[英]execute() function is not being executed when called

I am trying to make a keymap for my keyboard to not use Microsofts useless IME keyboard .我正在尝试为我的键盘制作一个键盘映射,以不使用微软无用IME keyboard So I wrote this python code with pynput .所以我用pynput写了这个python代码。

But it doesn't seem to execute my execute() function但它似乎没有执行我的execute() function

 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()

After thinking about Joaquín's "set to string" theory I converted my set to a string and it worked.在考虑了 Joaquín 的“设置为字符串”理论后,我将我的set转换为string并且它起作用了。

Thnx Joaquín.谢谢华金。

def execute(current_key) :
    s = str(current_key)
    for i in s :
        if i == "q" :
            print("q")
            #print("\bㅂ") I tested it with a language and it types the normal text too so I prefer adding\b before the letter/word/sentence

execute() has current but you never pass such variable to the function, so you are comparing nothing. execute() 有current变量,但您从未将此类变量传递给 function,因此您没有进行任何比较。 Your function should look like this你的 function 应该是这样的

   def execute(current) :
   
       if current == "q":
           
           print("q")

If you pass current to the function, it will have all the keys pressed now and use loop or if condition to check the key in pressed keys.如果您将current传递给 function,它将立即按下所有键并使用循环或 if 条件检查按下的键中的键。 or just pass the key if you need only the last key pressed.或者如果您只需要按下最后一个键,则只需传递该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)

or或者

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM