5

python xlib で keydown と keyup イベントをキャッチしたいのですが、いくつかのキーを同時に押すと keyup イベントが消えてしまいます。

2 つ以上のキーが同時に離された場合、2 つ以上のキープレス イベントが発生しますが、キーリリース イベントは 1 つだけです。

これを行うには、キーを同時に離す必要さえありません。たとえば、次のシーケンスをすばやく入力する場合です。

  1. Aを押します
  2. Bを押す
  3. リリースA
  4. リリース B

Aのキーリリースは1つだけになります

  1. Aを押します
  2. Bを押す
  3. リリース B
  4. リリースA

2つのキーリリースが得られます

from Xlib import X,XK
from Xlib.display import Display
import signal,sys

root = None
display = None

def grab_keyname(n):
    global root
    keysym = XK.string_to_keysym(n)
    keycode = display.keysym_to_keycode(keysym)
    root.grab_key(keycode, X.AnyModifier, False,X.GrabModeSync, X.GrabModeAsync)

def main():
    # current display
    global display,root
    display = Display()
    root = display.screen().root


    root.change_attributes(event_mask = X.KeyPressMask|X.KeyReleaseMask)

    grab_keyname("j")
    grab_keyname("k")
    grab_keyname("l")

    signal.signal(signal.SIGALRM, lambda a,b:sys.exit(1))
    signal.alarm(4)

    while True:
        event = display.next_event()
        print event.type

main()
4

1 に答える 1