- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用 python xlib 捕获 keydown 和 keyup 事件,但是当同时按下某些键时,keyup 事件会消失。
如果同时释放 2 个或更多键,则将有 2 个或更多按键事件,但只有 1 个按键释放事件。
为此,甚至不必同时释放键,例如,如果您快速输入此序列:
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()
最佳答案
尽管这个问题已有 7 年历史,但对于任何遇到此问题的人来说,这是一个解决方案:
这是 Xorg 中的一个“错误”(显然是故意的),它导致键盘抓取在按键释放时停止,并且仅在再次按下按钮时重新开始。因此,介于(-> 第二个按键释放事件)之间的任何事件都将丢失。见 https://bugs.freedesktop.org/show_bug.cgi?id=99280
那里提出的解决方案是有一个计数器来指示仍有多少键被按下,如果仍有未决按下,则手动抓取键盘。此外,键盘需要在最后一次释放事件后松开。
实现可能如下所示:
keys_pressed = 0
# ...
event = display.next_event()
if event.type == X.KeyPress:
keys_pressed += 1
elif event.type == X.KeyRelease:
if keys_pressed != 0:
keys_pressed -= 1
if keys_pressed == 0:
display.flush()
display.ungrab_keyboard(X.CurrentTime)
else:
root.grab_keyboard(False, X.GrabModeAsync, X.GrabModeAsync, X.CurrentTime)
请注意检查
keys_pressed != 0
在发布分支中:这是因为在松开键盘后,捕获了一个额外的发布事件(可能有一种方法可以防止这种情况发生,但对我的用例来说无关紧要......)
关于python xlib xgrabkey keyrelease 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18160792/
我在创建此类时收到两个错误。第一个出现在: public class DisplayerDeluxe extends JPanel implements ActionListener, KeyList
如果两个 jtextfield 为空或不为空,我将使用 keyReleased 来启用或禁用 jbutton。我在方法中放置了一些打印行语句,以在方法执行时查看 boolean 值。这些语句从未打印,
编写一个程序,根据给出的指令绘制形状。这是说明。但是,每当我编译时,我都会收到消息 DrawShapes is not abstract and does not override abstract
我在捕获关键发布事件以阻止我的角色在我的游戏中行走时遇到了一点问题.. 我正在尝试这样做: switch (xev.type) { case Expose: {
我试图让我的角色左右移动,然后当你将手指从左或右箭头键上移开时停止,但不断发生的事情是他继续前进。这是我的按键: public void keyPressed(KeyEvent e) {
我正在尝试用java制作一个游戏,只是一个简单的平台游戏,但运行代码时遇到困难。我似乎无法从按键中得到任何响应。我认为唯一不能正常工作的是 keyPressed 和 keyReleased 函数。下面
我正在使用 JComboBox 从 SQL DB 中搜索查询。我想在输入字母时搜索查询。我正在使用 NetBeans IDE。这是自动代码。 srch.addKeyListener(new java.
我正在尝试制作两个能够在所有 4 个方向上移动的对象(向上、向下、向右、向左)。第一个对象应使用 W、S、D、A 控制 - 而第二个对象应使用向上、向下、向右、向左箭头控制,并且可以正常工作。 但是,
我正在使用 Java 制作 2D 游戏,并且有一个关键监听器来处理玩家 Action 和其他内容。大多数时候它工作得很好。然而,有时它会出现故障。例如,我将按住“A”键使角色向左移动,当我松开它时,角
正如标题所说,KeyRelease 事件在 Mac OS X 上的全屏模式下根本不会被触发(尚未测试 Linux/Windows,也可能被破坏)。 代码如下: sf::ContextSettings
当用户按下四个箭头键(或 wasd)时,我试图让角色在一个简单的框架上移动。只要按住箭头键,角色就应该继续移动,一旦用户释放按键,角色就应该停止移动。 在很大程度上,这是令人感动的。然而,当快速切换方
所以,我正在使用 swing,我需要找到一个干净的(非 CPU 占用方式)来在文本字段上引入延迟。基本上,用户将在该字段中输入一个数字,keyReleased() 事件会检查输入是否符合一些参数,然后
我想记录所有传入的按键事件,无论哪个窗口处于焦点或指针在哪里。我已经编写了示例代码,它应该捕获当前窗口的按键事件(见下文)。为了保持我的代码可读性,我只给出了焦点窗口的示例代码。由于我的最终目标是捕捉
我想用 python xlib 捕获 keydown 和 keyup 事件,但是当同时按下某些键时,keyup 事件会消失。 如果同时释放 2 个或更多键,则将有 2 个或更多按键事件,但只有 1 个
我正在制作一个简单的电子队列,但遇到了困难。 我想让管理员登录在按下某个键并单击“登录”按钮时弹出(有更好的方法吗?),所以我让该类实现 KeyListener。但是 keyPressed()、key
在 PC 上,我可以为 JTextField 添加 onKeyListener 来监听 keyReleased 事件。在 Android 上,我使用了 addTextChangedListener。
我有一个实现 KeyListener 的 KeyHandler 类。除了左箭头键和右箭头键之外的所有键都可以工作,它们记录为按下但从未释放(向上和向下箭头可以工作,就像所有其他键一样)。键监听器被添加
在下面的代码中,如果我使用 KeyRelease 绑定(bind)事件,那么在点击 return 键时会导致文本小部件中出现不需要的新行。但是,如果我使用 KeyPress 绑定(bind)事件,则不
当我尝试在 Tkinter Text 小部件上使用 KeyRelease 事件时,它有时在 event.char 中提供小写字符,但在文本小部件中显示大写字符。当我轻快地按下 Shift 按钮,然后按
当我按下某个键一段时间后,在 keyReleased 函数中,该键的背景颜色并没有恢复到原来的颜色。我做错了什么。如果您可以将我重定向到某个站点,该站点包含有关如何通过示例制作此类程序的教程,那将非常
我是一名优秀的程序员,十分优秀!