我找不到用python注销grab_pointer
调用的方法。
如果您不取消抓取,您将无法单击内部窗口,这是一个恼人的问题,如果你习惯了它。
除了代码很难看之外,相关部分还包括:
try:
display.screen().root.grab_pointer(True, X.ButtonPressMask | X.ButtonReleaseMask, X.GrabModeAsync, X.GrabModeAsync, 0, 0, X.CurrentTime)
display.record_enable_context(ctx, handle_event)
display.record_free_context(ctx)
except:
display.record_disable_context(ctx)
#display.screen().root.ungrab_pointer(X.CurrentTime)
display.screen().root.ungrab_button(0, [0])
display.flush()
exit(1)
前三行获取指针,并将(与其余代码一起)输出我希望的每个事件。但是,每当引发问题或Ctrl+C事件时,except
块触发器(如预期的那样)。
问题是没有明确的display.screen().root.ungrab_pointer
调用。
使用这个库记录的每一段代码都说,但我找不到。
有什么办法解开指针吗?
版本:0.15-0.10.rc1.fc21
对于那些不幸想要帮助我的勇敢的人来说,下面是完整的代码:
import select
from Xlib.display import Display
from Xlib import X
from Xlib.ext.xtest import fake_input
from Xlib.ext import record
from Xlib.protocol import rq
def handle_event(event):
print(event)
display = Display(':0')
ctx = display.record_create_context(
0,
[record.AllClients],
[{
'core_requests': (0, 0),
'core_replies': (0, 0),
'ext_requests': (0, 0, 0, 0),
'ext_replies': (0, 0, 0, 0),
'delivered_events': (0, 0),
'device_events': (X.ButtonPressMask, X.ButtonReleaseMask),
'errors': (0, 0),
'client_started': False,
'client_died': False,
}]
)
try:
display.screen().root.grab_pointer(True, X.ButtonPressMask | X.ButtonReleaseMask, X.GrabModeAsync, X.GrabModeAsync, 0, 0, X.CurrentTime)
display.record_enable_context(ctx, handle_event)
display.record_free_context(ctx)
except:
display.record_disable_context(ctx)
#display.screen().root.ungrab_pointer(X.CurrentTime)
display.screen().root.ungrab_button(0, [0])
display.flush()
exit(1)
try:
while 1:
# Wait for display to send something, or a timeout of one second
readable, w, e = select.select([display], [], [], 1)
# if no files are ready to be read, it's an timeout
if not readable:
print('Got no events')
break
# if display is readable, handle as many events as have been recieved
elif display in readable:
i = display.pending_events()
while i > 0:
event = display.next_event()
handle_event(event)
i = i - 1
except:
display.record_disable_context(ctx)
display,ungrab_pointer(X.CurrentTime)
display.flush()
Ps.稍后,我将对它做一些很好的功能和类,但是首先我需要逻辑来工作,这样我才能更好地理解它。D.s
发布于 2015-12-24 08:33:24
ungrab_pointer
是一种显示方法,而不是窗口。
display.ungrab_pointer(X.CurrentTime)
很管用。
C这些功能的原型如下:
int XGrabPointer(Display *display, Window grab_window, Bool owner_events,
unsigned int event_mask, int pointer_mode,
int keyboard_mode, Window confine_to,
Cursor cursor, Time time);
int XUngrabPointer(Display *display, Time time);
Python库或多或少是Xlib的机械包装器。接受Display*
和Window
的函数通常映射到Window
类的方法,只接受Display*
的函数被映射到Display
的方法。
https://stackoverflow.com/questions/34422556
复制相似问题