我無法找到一種方法來註銷我的grab_pointer
與python-xlib的調用。
如果你沒有取消,你將無法點擊窗口,這是一個惱人的問題,如果你習慣了它。Xlib中的ungrab_pointer()不存在,但ungrab_button不會釋放鼠標
除了碼是難看,相關部分是thse:
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
調用aparently。我找不到一個。
任何想法如何解開指針?
版本: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()
詩篇。我將在後面編寫漂亮的函數和類,但首先我需要邏輯來工作,以便更好地理解它。 D.s
非常確定我嘗試了這一點,但是如果它真的起作用了,你現在就可以投票決定了。將檢查一下! – Torxed
可以發誓我試過這個,我做到了。但是我沒有顯示,ungrab_pointer(X.CurrentTime)'< - 注意逗號而不是點。 *嘆* – Torxed