【问题标题】:grabbing keyboard doesnt allow changing focus抓取键盘不允许改变焦点
【发布时间】:2013-08-12 05:30:57
【问题描述】:

一旦我使用 display.grab_keyboard,似乎没有其他窗口知道自己的焦点。

在运行keyboardgrab 的情况下,我可以选择其他窗口,甚至可以向它们发送keyevents,但如果这个窗口是文本输入,则不会有闪烁的光标。

我读过一些关于 grab_keyboard 生成焦点事件的内容,但这并不意味着它会阻止所有焦点事件,是吗?

我没有得到什么?

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

root = None
display = None

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


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

    root.grab_keyboard(True, X.GrabModeAsync, X.GrabModeAsync,X.CurrentTime)

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

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

main()

【问题讨论】:

    标签: python keyboard keyboard-shortcuts xlib


    【解决方案1】:

    您正在抓取键盘,这意味着所有键盘输入都将进入您的程序,没有其他窗口可以接收键盘输入。这就是抓住键盘的意义所在。

    【讨论】:

    • 我不希望其他窗口直接接收键盘输入,但我希望它们具有焦点/闪烁光标。这在理论上是可能的,我写了一些东西来抓住指针,然后将窗口聚焦在鼠标点击指针下。但是当我这样做时,我几乎不得不重写点击和拖动等等。有办法解决吗?
    • 不是真的,你已经接管了这些事件,所以你必须做 X/Xlib 对它们所做的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2013-09-28
    • 1970-01-01
    相关资源
    最近更新 更多